
시스템 로그 관리에 대한 흐름을 나타낸 그림이다. 시스템 이벤트가 발생하면 systemd-journald로 모두 전달된다. 부팅이 시작 되는 순간부터 로그를 수집하고 이후 rsyslogd로 전달하여 각 파일별로 저장한다.
로그 수집 데몬에 따라 저장되는 위치가 다르다. 우선 시스템 로그, 서비스 로그, 커널 로그는 모두 systemd-journald로 전달되고, journal이라는 로그 저장 파일을 생성, 그 중 syslog는 rsyslogd로 전달한다. 이후 rsyslogd는 /var/log에 별도로 로그 파일을 생성하고 저장한다.
/var/log/messages: 대부분 로그 기록 (인증, 메일, cron, booting, debugging 관련 로그는 제외)/var/log/secure : 인증 관련 로그/var/log/maillog : 메일 관련 로그/var/log/cron : 예약 작업 관련 로그/var/log/boot.log : 부팅 관련 로그수집된 로그인 jounal은 /run/log/journal에 .bin형태로 저장된다. /run 디렉토리는 메모리 기반 파일 시스템에 마운트 되어 있어 재부팅 되면 삭제된다. 
로그 파일에 계속 저장하게 되면 크기가 과도하게 커지고 분석하기 어려워지며 파일을 읽어 오는데 메모리 사용량이 많아지게 되어 일정 기간, 크기에 달하면 로그 파일을 백업하고, 백업 파일도 마찬가지로 일정 기준에 따라 삭제하도록 설정하는 것을 로그 파일 순환이라고 한다.
log rotate 설정은 위 logrotate.conf파일을 이용한다. 순환 주기, 보관 기간과 같은 옵션이 담겨 있고 이를 통해 새로운 로그 파일을 만들어 관리하게 된다. 실습은 logrotate 기준을 기간으로 잡을 경우 오랜 시간이 걸리므로 크기를 기준으로 진행하겠다.
# history
mkdir /var/log/testLog
touch /var/log/testLog/testLog.log
dd if=/dev/zero of=/var/log/testLog/testLog.log bs=512 count=10
ls -l /var/log/testLog
실습에 사용할 디렉토리와 로그 파일을 생성하고 5kb 크기의 데이터를 추가했다.
/etc/logrotate.d/testLog라는 이름으로 순환 시킬 로그 파일, 순환 조건, 순환 파일 개수, 로그 파일의 이름을 설정한다.
logrotate명령으로 수동으로 로그를 순환시켰다. 기존에 생성했던 testLog.log파일은 testLog.log.1로 수정되었고, 새로운 로그 파일이 생성된 것을 확인할 수 있다.
rsyslogd는 시스템 로그 표준 프로토콜로 syslog를 사용하여 로그를 저장하는 프로세스다. /etc/rsyslog.conf를 사용해 저장할 로그 파일을 설정하고 수신 로그를 /var/log의 각 파일로 전달한다.
rsyslog.conf파일에 로그 규칙 관련 내용이다. 공백 기준 앞이 Filter, 뒤가 동작이다.
필터를 만약 cron.err로 설정했다면 선택한 로그 레벨은 err이 되고, emerge ~ err까지의 모든 로그를 다 저장하겠다는 의미가 된다. 이를 그림으로 표현하면 위와 같다.
시스템 부팅부터 발생하는 모든 이벤트를 수집하여 바이너리 형태의 journal을 저장한다. 일반적인 파일 조회 명령으로는 확인이 불가하여 journalctl이라는 명령을 사용하여 데이터를 조회한다.
journalctl 명령을 옵션과 인자 없이 실행하면 현재 저장된 저널 데이터를 확인할 수 있다. 여기서 가장 먼저 출력되는 것은 부팅 관련 로그이다.
우선 순위 지정 출력, 날짜 지정 출력과 같이 다양한 옵션이 있지만 최근 로그와 현재 발생하고 있는 이벤트에 대한 로그를 실시간으로 모니터링 할 수 있는 -f옵션이 있다.
위 사진과 같이 실시간으로 로그를 확인할 수 있다.
위에서 말한거처럼 메모리 기반 파일 시스템에 저장되기 때문에 재부팅시 사라지게 된다. 이때 설정을 통해 로그 파일을 영구 저장할 수 있다. 영구 저장 설정 방법은 다음과 같다.
# history
ls -ld /run/log/journal/
mkdir /var/log/journal
chown root:systemd-journal /var/log/journal/
chmod g+s /var/log/journal/
systemctl restart systemd-journald
기존 /run/log/journal/ 디렉토리 소유권을 변경하고 setgid설정을 하고 시스템 데몬을 재시작한다.
영구 저장을 항상 할 수 있는건 아니고 저널 데이터 파일 크기가 현재 파일 시스템 전체 사이즈의 10%를 초과하면 안되고 현재 파일 시스템 여유공간 중 15%를 초과하면 안된다라는 조건이 따른다.