티스토리 뷰

logrotate 는 특정 파일을 일정 시점, 크기 등 지정된 조건에 따라서 백업해주는 명령어이다. 주로 시간이 지남에 따라 한 없이 커질 수 있는 로그파일을 logrotate 를 통해 주기적으로 백업하는데 이용된다. 예를들어 system.log 라는 파일이 매일 1 GB 씩 내용이 누적된다고 하면 한달이면 벌써 30 GB 가 되버리고 그 파일 자체를 핸들링하는게 매우 어렵게 된다 ( 파일 안에서 특정 단어를 검색한다던지 ). 이럴 때 logrotate 를 통해 매일 지정된 시간에 system.log.1.gz, system.log.2.gz, system.log.3.gz... 으로 자동 백업하거나 파일 크기가 일정 사이즈 이상 되었을 때 분할 할 수 있다.

우선 logrotate 는 심플한 소개가 달려있다.

$ whatis logrotate
logrotate (8)        - rotates, compresses, and mails system logs

그럼 바로 실전으로 들어가보자. 놀랍게도 기본적으로 데비안이나 레드햇 등에서 나오는 대부분의 *NIX 시스템에는 이미 logrotate 가 돌고 있다. 그런이유로 /var/log 밑에 여러 파일이 rotates 되고 있는게 확인된다. 이건 cron 시스템에 의해 동작하게 되는데 여기서는 다루지 않고 logrotate 의 설정 파일부터 들여다보자. 패키지 설치 프로그램 ( apt, yum 등 ) 으로 logrotate 가 설치 되었다면 logrotate 의 설정파일은 /etc/logrotate.conf  에 있을 텐데 내용중 include /etc/logrotate.d 가 쓰여있는 라인에 주목하자. /etc/logrotate.d 디렉터리 밑에 있는 모든 설정을 포함한다는 내용으로 이제 사용자가 특정 로그를 rotate 하려면 /etc/logrotate.d 디렉터리 밑에 규칙에 맞게 파일만 작성해주면 되겠다.

아래 샘플 파일( /etc/logrotate.d/foo )을 참고하도록 하자. 첫 라인에 명시된 파일을 rotates 하라고 지정하는 설정 파일이다.

/home/foo/node/logs/*log {
    su foo foo
    daily
    rotate 10
    missingok
    notifempty
    compress
    postrotate
        su - foo -c "pm2 restart all 2>/dev/null || true"
    endscript
}

이 예제는 인터넷에 돌아다니는 흔한 내용에 두 가지 내용이 추가되어있다. 일반적으로 rotates 대상이 되는 파일은 보안그룹이 root 에서 제어할 수 있어야 하는데 일반 사용자 디렉터리는 그게 안된다. 보안그룹을 맞춰주던지 보안 등급을 낮춰야 하는 수고가 뒤따른다. 이 예제는 이 부분을 회피하기 위한 방법으로 첫번째 라인에 su foo foo 를 추가해줬다. 형식은 아래와 같다.

su <user> <group>

그리고 postrotateendscript 사이에 사용자 스크립트를 추가할 수 있는데 foo 계정으로 지정된 스크립트를 실행시켜줬다. 일반적으로 pm2 는 실행하는 계정에 존속관계가 있기 때문에 rotates 를 실행하는 root 에는 pm2 에 내용이 없다. foo 계정으로 pm2 등의 스크립트를 실행시켜준다는게 핵심이다.

su - foo -c "pm2 restart all 2>/dev/null || true"

나머지 옵션은 다음과 같은 뜻을 갖는다.

 daily 

 rotate 되는 주기를 하루 단위로 한다. hourly, weekly, monthly, yearly 로 설정할 수 있다

 rotate 10

 rotate 된 파일을 보관할 개수를 10개로 지정한다

 missingok

 파일이 없어도 오류를 발생시키지 않는다

 notifempty

 파일이 비어있으면 rotate 하지 않는다

 compress

 rotate 된 로그파일을 압축한다. default 로 지정되어 있다


조금 더 다양한 옵션은 아래를 참고하도록 하자.

https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

댓글
댓글쓰기 폼