"Nginx 로그 일자별 기록하기"의 두 판 사이의 차이
라이언의 꿀팁백과
(logrotate 설정 설명 추가) |
|||
33번째 줄: | 33번째 줄: | ||
!라인수 | !라인수 | ||
!옵션 | !옵션 | ||
! | !설명 | ||
|- | |- | ||
|2 | |2 |
2022년 2월 19일 (토) 10:01 기준 최신판
1 문제점[편집 | 원본 편집]
대부분의 일반적인 프로그램은 로그(log)[1]를 남긴다. 오픈소스 웹서버인 nginx 또한 로그를 남기는데 기본적으로 해당 프로그램은 1개의 파일에 로그를 기록하기 때문에 관리에 어려움이 발생한다.
2 해결방법[편집 | 원본 편집]
이러한 문제점을 해결하기 위해서는 로그를 의미 있는 단위로 나누어서 관리하는 것이다. 가장 일반적인 방법은 일자로 로그를 나누는 것인데, 이를 위해 여기서는 logrotate[2] 라는 프로그램을 사용하고자 한다.
3 logrotate 관련 설정[편집 | 원본 편집]
아래와 같이 /etc/logrotate.d/nginx 라는 파일을 생성한다.
/app/nginx/logs/*.log {
create 0644 nginx web
daily
missingok
rotate 365
compress
delaycompress
notifempty
dateformat .%Y-%m-%d.log
dateext
sharedscripts
postrotate
if [ -f /app/nginx/run/nginx.pid ]; then
kill -USR1 `cat /app/nginx/run/nginx.pid`
fi
endscript
}
4 logrotate 설정 설명[편집 | 원본 편집]
라인수 | 옵션 | 설명 |
---|---|---|
2 | create 0644 nginx web | 로그 파일을 만들 때 permission 은 0644, user 및 group은 각각 nginx, web 으로 설정 |
3 | daily | 매일 logrotate 가 실행됨 (weekly, monthly, yearly 까지 총 4개 옵션 있음) |
4 | missingok | 로그 파일이 없더라도 오류 처리를 하지 않음 |
5 | rotate 365 | 로그 파일은 365개 까지 저장하고 나머지는 삭제함 |
6 | compress | 로그 파일을 압축함 |
7 | delaycompress | 다음 logrotate 시 때까지 로그파일 압축을 미룬다.
|
8 | notifempty | 로그 파일 크기가 0 이면 |
9 | dateformat .%Y-%m-%d.log | 로그 파일명에 .YYYY-MM-DD.log 파일을 항상 붙이도록 설정 |
10 | dateext | 로그 파일명에 YYYYMMDD 형식을 추가함(dateformat 옵션으로 형식 변경 가능) |
11 | sharedscripts | postrotate ~ endscript 내 명령이 한 번만 실행되도록 함
(이 명령어가 없으면 관리하는 로그 수만큼 해당 명령어가 실행됨) |
12 ~ 16 | postrotate
if [ -f /app/nginx/run/nginx.pid ]; then kill -USR1 `cat /app/nginx/run/nginx.pid` fi endscript |
만약 nginx process 가 실행중이면 해당 프로세스에 USR1 시그널을 보냄
nginx는 USR1 시그널을 수신하면 로그 파일을 다시 open 함 (Link) |