👨🏻‍💻Infra/🐧Linux

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

공개하기부끄러운블로그 2019. 7. 16. 09:33
반응형

이건 참고 하자

---------------------------------------------------------------------------------------------

logrotate 관련 파일
# /usr/sbin/logrotate : 데몬의 위치 및 데몬프로그램
# /etc/logrotate.conf : 설정 파일.
# /etc/logrotate.d : logrotate를 적용할 로그 파일 보관 디렉토리.
# /var/lib/logrotate.status : logrotate가 작업 내역 보관 파일.
# /etc/cron.daily/logrotate : logrotate : cron 에 의해 일 단위로 실행한다.


동작 순서
1. cron.daily 에서 /usr/sbin/logrotate 호출 
2. /usr/sbin/logrotate 에서 /etc/logrotate.conf 설정파일 참조 

3. /etc/logrotate.conf 설정 파일에서 /etc/logrotate.d 참조 

# vi /etc/logrotate.d/apache

/var/logs/apache/access_log {
  su apache apache
  create 0644 apache apache
  size +1k
  missingok
  notifempty
  compress
  dateext
  postrotate
    /usr/bin/killall -HUP httpd
  endscript

----------------------------------------------------------------------------



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자원이 소모되므로 피해야 한다)


강제실행
# /usr/sbin/logrotate -f /etc/logrotate.d/apache

테스트
# /usr/sbin/logrotate -d /etc/logrotate.d/apache



출처: https://devnerd.tistory.com/entry/1-Nginx-log를-logrotate를-사용하여-일자별로-관리하기 [eyesofkhepri]

반응형