# https://www.cambus.net/log-rotation-directly-within-nginx-configuration-file/
# 하지만 error.log 에는 적용이 안된다.
# nginx.conf 설정
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
}
access_log /var/log/nginx/$year-$month-$day-$hour-$minutes-access.log;
# 방법2
# https://www.nginx.com/resources/wiki/start/topics/examples/logrotation/
# http://nginx.org/en/docs/control.html#logs
# USR1 시널을 사용해 로그 파일 모두 rotate 가능하다.
# 쉘 스크립트를 작성해서 크론잡으로 등록한다.
# 1시간 전의 시간으로 파일명 변경
mv access.log `date -d '1 hour ago' '+%Y-%m-%d-%H-%M'`-access.log
# nignx 마스터 프로세스에 USR1(file reopen) 시그널 보내기
kill -USR1 `cat master.nginx.pid`
sleep 1
# 로그레벨 참고 : debug, info, notice, warn, error, crit, alert, emerg
error_log logs/error.log 로그레벨;
# 방법3
# logrotate 사용(nginx 외 일반적인 로그들에 모두 사용 가능)
# https://github.com/logrotate/logrotate
# centos logrotate 설치
yum install logrotate
# ubuntu(debian) logrotate 설치
apt-get install logrotate
# logrotate 는 cron 으로 실행 주기를 관리한다.
# logrotate 기본 설정
vi /etc/logrotate.conf
# 설정 파일들 위치 포함
include /etc/logrotate.d
# nginx logrotate 설정
vi /etc/logrotate.d/ysoftman_nginx
# /var/log/nginx/*.log 파일은
/var/log/nginx/ {
# 매일 로그를 바꾼다. 매주는 weekly, 매월은 monthly
daily
# 4일 분량의 로그를 남긴다. weekly 라면 4일, monthly 라면 4월
rotate 4
# 로그 파일이 비워있으면 로테이션 하지 않는다.
notifempty
# 로그파일이 유실되더라고 에러를 발생시키지 않는다.
missingok
# 로테이션후 빈파일을 생성
create
# 로테이션된 파일의 suffix 로 날짜지정 (xxx.log-YYMMDD)
dateext
# 압축하기
compress
# 모든 로그파일에 대해서 postrotate 스크립트가 한번만 실행되도록(공유) 한다.
sharedscripts
compress
# 모든 로그파일에 대해서 postrotate 스크립트가 한번만 실행되도록(공유) 한다.
sharedscripts
# postrotate ~ endscript 사이에는 로테이션 후 실행될 쉘 스크립트 명시
postrotate
kill -USR1 `cat /home/ysoftman/nginx/master.nginx.pid`
endscript
}
# 테스트 해보기
# logrotate 는 로테이션 된 내역을 다음 파일로 기록한다.
# 여기에 기록된 파일들은 로테이션 되지 않는다.
# 테스트를 위해 logrotate 필요하다면 파일명 뒤에 있는 rotate 시간을 과거로 수정한다.
# 이파일은 삭제하더라도 logrotate 실행하면 다시 이전 상태로 복구되니 시간을 수정해야 한다.
cat /var/lib/logrotate/logrotate.status
# debug(실제 rotate 는 되지 않음)모드로 테스트
# 실행 작업 순서가 출력지만 실제 rotate 할때는 에러가 발생할 수 있다.
logrotate -d /etc/logrotate.d/ysoftman_nginx
# 실제 rotate 해보기
# compress 등 rotate 후의 작업이 실행이 되지 않았다면
# -v 로 postrotate 등의 스크립트 에러 메시지를 체크해 보자.
logrotate -v /etc/logrotate.d/ysoftman_nginx
postrotate
kill -USR1 `cat /home/ysoftman/nginx/master.nginx.pid`
endscript
}
# 테스트 해보기
# logrotate 는 로테이션 된 내역을 다음 파일로 기록한다.
# 여기에 기록된 파일들은 로테이션 되지 않는다.
# 테스트를 위해 logrotate 필요하다면 파일명 뒤에 있는 rotate 시간을 과거로 수정한다.
# 이파일은 삭제하더라도 logrotate 실행하면 다시 이전 상태로 복구되니 시간을 수정해야 한다.
cat /var/lib/logrotate/logrotate.status
# debug(실제 rotate 는 되지 않음)모드로 테스트
# 실행 작업 순서가 출력지만 실제 rotate 할때는 에러가 발생할 수 있다.
logrotate -d /etc/logrotate.d/ysoftman_nginx
# 실제 rotate 해보기
# compress 등 rotate 후의 작업이 실행이 되지 않았다면
# -v 로 postrotate 등의 스크립트 에러 메시지를 체크해 보자.
logrotate -v /etc/logrotate.d/ysoftman_nginx