eyesofkhepri

1. Nginx log를 logrotate를 사용하여 일자별로 관리하기 본문

카테고리 없음

1. Nginx log를 logrotate를 사용하여 일자별로 관리하기

eyesofkhepri 2017. 11. 28. 17:05

1. Nginx log를 logrotate를 사용하여 일자별로 관리하기

(1) 서버별로 로그를 남기도록 설정한다.

파일명: ${NGINX_HOME}/nginx.conf


...

server {

...

access_log /home/user/log/nginx/access;

...

}

...

(2) 로그를 위한 logrotate 설정 파일을 만든다.

파일명: /etc/logrotate.d/nginx-access-log


/home/user/log/nginx/access {

    create 0644 nginx nginx

    daily

    rotate 30

    missingok

    notifempty

    dateformat .%Y-%m-%d.log

    dateext

    sharedscripts

    postrotate

       /etc/init.d/nginx reopen_logs

    endscript

}

(3) crontab에 해당 logrotate 실행 명령어를 등록한다.

crontab -l

59 23 * * * /etc/logrotate.d -f /etc/logrotate.d/nginx-access-log

(부가) logrotate 설정 옵션

create 0644 nginx nginx : 생성된 파일은 0644권한을 주며 nginx유저와 nginx그룹을 가지도록 한다.

daily : 일 단위로 rotate한다.

rotate 30 : 30개 이상된 로그파일을 삭제

missingok : 로그파일이 없더라도 오류를 발생시키지 않는다.

notifempty : 파일의 내용이 없을 경우 파일을 생성하지 않는다.

dateext : 1,2,3... 같은 라벨이 아닌 날짜를 붙여서 파일을 생성한다. 

dateformat .%Y-%m-%d.log : 파일에 .YYYY-MM-DD.log를 뒤에 붙인다. dateexe옵션과 같이 쓰인다.

sharedscripts : postrotate ~ endscript안에 script가 동작할때 각각의 로그마다 실행 되는 것이 아니라 1번만 실행되도록 하는 옵션이다. (즉) /home/user/log/nginx/*.log{ ... } 으로 확장자가 log라는 파일을 rotate할때 각각의 파일이 아닌 1번만 postrotate ~ endscript안의 스크립트를 실행하도록 하는 옵션이다.

maxage 30 : 30일 이상된 로그파일 삭제

size 용량 : 지정된 용량이 되면 rotate한다.

ifempty : 로그파일이 비어있는 경우에도 rotate한다.

monthly : 월단위로 rotate한다.

weekly : 주단위로 rotate한다.

compress : gzip으로 압축한다.

nocompress : 압축하지 않는다.

mail 메일주소 : 설정에 의해 보관 기간이 끝난 파일을 메일주소로 발송한다.

mailfirst 메일주소 : 원본파일을 메일주소로 보낸다.

nomail : 메일을 받지 않는다.

errors 메일주소 : rotate중 오류발생시 메일주소로 통보한다.

copytruncate : 로그파일의 내용을 복사하고 로그파일의 크기를 0으로 만들도록 동작하게 하는 옵션. (만약 파일용량이 크다면 하지 복사하는데 I/O자원이 소모되므로 피해야 한다)






Comments