로그 관리 데몬

systemd시스템에서 로그는 rsyslogd 와 systemd-journald두데몬에 의해 관리됩니다.

시스템에서 이벤트가 발생하면 모두 systemd-journald 로 전달됩니다. 이는 부팅 시작부터 로그를 수집하며 이후에 rsyslogd로 syslog를 전달하여 각 파일 별로 로그를 저장합니다.

 

로그 관리 데몬 흐름도

 

rsyslogd에 의해 수집되는 로그의 파일 위치

/var/log/messages : 대부분의 로그 기록 (인증,메일,cron,부팅,디버깅과 관련된 로그를 제외)

/var/log/secure : 인증과 관련된 로그를 기록

/var/log/maillog : 메일고 관련된 로그를 기록

/var/log/cron : 주기적인 작업과 관련된 로그를 기록

/var/log/boot.log : 부팅과정에 발생된 로그를 기록

 

 

systemd-journald 에 의해 처리되는 저널 데이터 파일의 위치

systemd-journald 에 의해 수집되는 로그는 저널(journal) 데이터라고 부르며, /run/log/journal 디렉토리에 바이너리 파일 형태로 저장됩니다.

저널 데이터 파일이 저장되는 /run 디렉토리는 메모리 기반 파일시스템인 tmpfs로 마운트 되어 있으므로 시스템이 재부팅 되면 저널 데이터 파일은 삭제됩니다.

 

저장 경로 ->/run/log/journal

[root@localhost ~]# ls -lR /run/log/journal
/run/log/journal:
total 0
drwxr-s---+ 2 root systemd-journal 60 May 17 09:43 9ba7072b23acb44487a132be7e2230ee

/run/log/journal/9ba7072b23acb44487a132be7e2230ee:
total 8192
-rwxr-x---+ 1 root systemd-journal 8388608 May 17 10:16 system.journal

 

/etc/rsyslog.conf

/etc/rsyslog.conf 파일의 룰(rule)부분에는 rsyslogd 에 의해 전달되는 로그의 규칙들이 저장되어있습니다.

규칙을 정의할 때 공백을 기준으로 앞부분을 필터(Filter)라 하고 뒷부분을 행동(Action) 이라 합니다.

 

필터(Filter)

필터는 로그 메시지를 분류하기위한 기준입니다. 필터 조건에 따라 로그 메시지가 처리되는 방식을 결정할 수 있습니다.

1. 기능 및 우선 순위 기반 필터

2. 속성 기반 필터 

3. 표현 기반 필터

 

세가지 형식으로 분류됩니다.

 

1. 기능 및 우선 순위 기반 필터는 로그의 정류와 로그의 우선순위 를 기준으로 분류하는 방식이며 속성 기반 필터는 로그 메시지에 포함된 호스트 이름,메시지,태그 등의 속성을 기준으로 로그를 분류하는 방식입니다.

 

기능의 종류

기능 설명
kern 커널 메시지
user 유저 레벨 메시지
mail 메일 관련 메시지
daemon 시스템 데몬 메시지
auth 보안 및 인가 메시지
syslog syslogd에 의해 내부적으로 생성된 메시지
lpr 라인프린터 하위 시스템
news 네트워크 뉴스 하위 시스템
uucp UUCP 하위 시스템
cron 스케줄 작업 메시지
authpriv 보안 및 인가 메시지
ftp FTP데몬 메시지
local0-local7 사용자 정의 기능

 

우선 순위 종류

코드 우선순위(priority) 설명
0 emerg 시스템 사용 불가
1 alert 즉시 조취를 취해야 할 상태
2 crit 치명적인 상태
3 err,error 에러발생
4 warn,warning 경고발생
5 notice 일반적이지만 중요
6 info 간단한 정보
7 debug 디버깅 메시지

 

0에 가까울수록 시스템에 영향이 높은 로그 메시지로, 하드웨어 이상에 따른 즉각적인 시스템 중단 경고가 해당되고, 코드값이 7에 가까운 로그 메시지는 일반적으로 사용자에게 표시되어야할 필요는 없지만, 경우에 따라 문제 해결에 유용하게 사용될 수 있는정보입니다.

 

행동(Action)

행동은 필터에 의해서 선택된 로그들이 처리되는 방법을 정의하는 부분입니다. 주로 파일에 메시지를 저장하거나, 시스템에 로그인된 사용자에게 메시지를 전달합니다.

 

systemd-journald

systemd-journald는 시스템이 부팅이 시작할 때 부터 발생하는 모든 이벤트를 수집해서 구조화된 바이너리 형태의 저널데이터로 저장합니다. 이 저널 데이터는 구조화 되어있기 때문에 인덱싱을 통해 사용자가 원하는 내용을 쉽고 자세하게 찾을수있습니다.

 

journalctl

journalctl 명령을 사용하여 저널 데이터를 조회할수 있습니다.

 

 

journalctl [option] [argument]

 

옵션이나 인자없이 사용한다면 현재 저장된 저널 데이터를 순차적으로 출력합니다. 출력은 시간순이다.

 

-p 옵션을 추가하면 특정 우선순위를 지정하여 로그를 출력할 수 있습니다.

 

-r : 최근에 발생한 저널 데이터 출력

-f : 실시간 저널 데이터 모니터링

 

--since ' YYYY-MM-DD hh :mm :ss' 형식을 통해 지정 시점부터의 저널데이터를 조회 할수있습니다.

--since ' ~ ' --until : 특정기간의 저널 데이터 출력

-o : 저널데이터의 출력 설정

 

 

저널 데이터의 영구적 저장

저널 데이터가 저장되는 파일은 /run/log/journal 디렉토리에 존재하기 때문에 시스템이 재부팅되면 삭제됩니다. 이를 영구적으로 저장하려면 기존의 저널 데이터가 저장되던 경로인 /run/log/journal 디렉토리와 동일하게 설정하여야합니다.

 

이를 위해선

1. 기존 디렉터리 설정값 확인 ( ls -ld /run/log/journal/)

2. 저널 데이터 저장 디렉토리 생성 및 설정 변경 (일반적으로 로그 파일들이 저장 되는 /var/log 디렉토리에 저널데이터를 저장할 새로운 디렉토리를 생성하고 설정을 변경합니다 mkdir /var/log/journal)

3. 저널 데이터를 영구적으로 저장하도록 설정한 뒤 systemd-journald 를 재시작하면 즉시 /varlog/journal 디렉토리에 저널 데이터가 저장되고 시스템이 재부팅되어도 유지됩니다. ( journalctl --list-boots )

 

 

+ Recent posts