리눅스 자체적으로 여러 가지 시스템 로그를 /var/log 경로에 남긴다. 이 로그 파일들은 logrotate 라는 툴로 규칙에 따라 분할 저장, 자동 삭제할 수 있다.
예를 들어 messages 라는 단일 파일에 오랜 기간 로그가 집중적으로 쌓이면 하나의 로그 파일 용량이 너무 커질 수 있으므로 messages_20240423, messages_20240424, messages_20240425 … 처럼 나눠서 쌓게 만드는 것이다.
1. logrotate.d 확인
/etc/logrotate.d
경로에서 logrotate이 관리하는 로그 유형을 확인할 수 있다. 그중에서도 syslog에 cron, maillog, messages, secure, spooler 같은 로그 파일의 관리 규칙이 명시되어 있다.
2. syslog 수정
/etc/logrotate.d/syslog 파일을 수정한다. 수정 전엔 원본을 백업해둔다.
cp syslog syslog_20240425
- daily : 매일 로그 파일을 로테이트
- rotate : 로그 파일 N개를 보관(그 이상이 되면 과거 로그를 삭제)
- dateext : 로그 파일 이름에 로테이션 날짜를 추가
- dateformat : 날짜 형식을 지정
- missingok : 로그 파일이 없어도 에러 없이 넘어감
- sharedscripts : postrotate 스크립트를 로그 세트별로 한 번만 실행
- postrotate : 로그 파일 로테이션 후 실행할 명령어
이렇게 설정하면 로그 파일을 cron_20240423, cron_20240424, cron_20240425 처럼 날짜별로 저장하도록 하고 갯수가 30개를 넘지 않게 자동 삭제하는 것이다.
파일 내 경로가 나열된 로그 파일에 모두 적용된다.
3. 변경사항 디버깅
로테이트를 돌리기 전에 수정한 내용에 문제가 없는지 디버깅을 한다.
[root@localhost logrotate.d] logrotate -d syslog
error가 찍히는 라인이 없는지 확인한다.
4. 로테이트 수동 실행
이렇게 적용해놓으면 따로 서비스를 재기동하는 작업은 필요없다. 그래도 적용이 잘 되는지 확인하기 위해 수동으로 logrotate를 실행해본다.
[root@localhost logrotate.d] logrotate -f syslog
의도한대로 시스템 로그들이 분할 저장되었는지 확인한다. 경로는 /var/log 다.
사실은 애초에도 “syslog-날짜” 방식으로 분할되어 저장되고 있었다. 하지만 간격이 조금 있는 편이라 이 글처럼 일별로 나누거나 그외 원하는 관리 방식이 있으면 logrotate 옵션에 대해 찾아보고 적용하면 된다.