개발팁/nginx

nginx log를 rotate 해서 일자별로 관리 (logrotate)

신선한빵 2021. 4. 1. 22:24
반응형

예전에 nginx 로그 설정 때 궁금해서 찾아본 내용인데 내용 자체는 내가 정리한 것이 아니라 다른 개발자 블로그 분이 정리한 내용이다.

그때 당시에는 블로그에 올릴 생각이 없어서 개인 메모로 따로 남겨놓은 내용인데 메모 내용을 블로그로 옮기다 보니 출처를 까먹어서 내용 을 좀 정리해서 다시 올린다.

 

전역 로그 설정

 

nginx 의 가상 호스트 설정에는 다음과 같이 웹 서버의 로그 파일을 기록하도록 설정했습니다.

 

server {

    root /var/www/www.lesstif.com;

    listen 443 ssl http2;

    server_name  www.lesstif.com;

 

    charset utf-8;

 

    access_log  /var/log/nginx/lesstif.com-ssl.access.log  combined;

    error_log  /var/log/nginx/lesstif.com-ssl.error.log  notice;
}

 

 

logrotate 설정

 

# vi /etc/logrotate.d/nginx

 

/var/log/nginx/*.log {

        daily

        missingok

        rotate 52

        compress

        delaycompress

        notifempty

        create 640 nginx adm

        sharedscripts

        postrotate

                if [ -f /var/run/nginx.pid ]; then

                        kill -USR1 `cat /var/run/nginx.pid`

                fi

        endscript

}

 

 

  • missingok : 로그 파일이 없어도 에러를 내지 않음
  • rotate 52: 로그 파일을 52개까지만 보관(53일 이전것은 삭제), 필요한 경우 숫자를 조정해서 로그 보관 일수를 변경
  • compress: 압축해서 보관
  • create 640 nginx nginx: 새로 로그 파일 생성시 640 모드로 생성하고 소유자, 그룹은 nginx
  • 실제 nginx 웹 서버의 구동 계정과 맞춰야 하며 잘못 설정했을 경우 nginx 가 로그를 기록할 수 없습니다.
  • notifempty: 빈 로그파일은 로테이트 하지 않습니다.
  • postrotate: rotate 작업을 마친후에 실행할 스크립트를 적어줍니다. nginx 의 경우 SIGUSR1 을 받으면 로그 파일을 새로 읽으므로 새로 만들어진 로그 파일에 로그를 기록합니다.
  • 이 부분이 제대로 설정되어 있지 않으면 nginx 는 이미 오픈한 로그 파일에 계속 기록합니다. 이로 인해 예전 로그 파일에 내용이 쌓이므로  주의해야 합니다.

정상 설정 여부를 테스트하기 위해 다음 명령어를 실행합니다.

 

# logrotate -d -f /etc/logrotate.d/nginx

 

  • -d, --debug : 디버그 모드, 실제 로그 파일을 변경하지는 않고 처리 과정만 표시합니다.

 

정상적으로 설정됐다면 /etc/cron.daily/logrotate  파일이 있으므로 별도로 크론에 등록하지 않아도 매일 log 파일 rotate 실행됩니다.

반응형

'개발팁 > nginx' 카테고리의 다른 글

nginx 에러페이지 설정  (0) 2021.03.23