linux - logrotate.d를 이용한 로그파일 관리
서버를 운영하면서 로그가 계속 쌓여 디스크 용량이 꽉차게 되어 서비스가 중단되는 경험을 하게 되어 로그를 주기적으로 관리해주는 logrotate에 대해서 알아보도록 하겠습니다.
logrotate
리눅스 시스템에서 로그 파일을 자동으로 관리하는 도구이며. 로그 파일이 무한히 커지는 것을 방지하고, 디스크 공간을 효율적으로 사용할 수 있도록 돕습니다.
주요기능
- 로그 회전 : 일정 주기마다 새로운 로그 파일을 생성하고, 오래된 로그 파일을 보관
- 압축 : 회전된 로그 파일을 압축하여 디스크 공간을 절약
- 삭제 : 일정 기간이 지난 로그 파일을 자동으로 삭제
- 스크립트 실행 : 로그 회전 후 특정 명령이나 스크립트 실행
여기서 회전의 의미는 새로운 파일을 생성하다라는 의미
설정하기
logrotate를 설정하기 위해 /etc/logrotate.d/
경로에 파일을 생성한뒤 밑의 코드를 작성해준다.
1
2
3
4
5
6
7
8
9
10
11
/var/log/*.log {
daily
rotate 1
compress
missingok
notifempty
delaycompress
postrotate
systemctl reload syslog > /dev/null 2>&1 || true
endscript
}
코드 설명
/var/log/*.log
: /var/log 디렉토리의 모든 .log 파일을 대상으로 설정합니다.
daily
: 로그 파일을 매일 회전시킵니다. 즉, 새로운 로그 파일을 매일 생성합니다.
rotate 1
: 최대 1개의 로그 파일만 보관합니다. 새로운 로그 파일이 생성되면 이전 로그 파일이 삭제됩니다.
compress
: 회전된 로그 파일을 압축하여 디스크 공간을 절약합니다.
missingok
: 로그 파일이 없더라도 오류를 발생시키지 않습니다. 로그 파일이 없는 경우 이를 무시합니다.
notifempty
: 로그 파일이 비어 있으면 회전시키지 않습니다. 비어 있는 파일은 회전하지 않습니다.
delaycompress
: 로그 파일을 회전시키고 다음 회전 주기까지 압축을 지연시킵니다. 즉, 회전된 다음 날에 압축됩니다.
postrotate/endscript
: 로그 파일이 회전된 후 실행할 명령어 블록입니다. 여기서는 systemctl reload syslog
명령어를 사용하여 syslog
서비스를 재시작합니다. > /dev/null 2>&1
는 명령어의 출력을 무시하고, || true
는 명령어가 실패하더라도 무시합니다.
실행되는 시간은 sudo nano /etc/crontab 를 통해 확인해 볼 수 있다.
1
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
분: 25분
시: 6시 (오전 6시 25분)
일: 매일 ( * )
월: 매월 ( * )
요일: 매주 ( * )