Daylogs/Nginx
nginx: 로그 로테이트 적용하기 + 상세 설정
ohgyun
2017. 7. 27. 01:21
발생일: 2016.10.19
키워드: nginx log rotation, logrotate, logrotated, 로그 로테이트, log rotate, midsize, maxsize, size
문제:
nginx 로그를 특정 주기로 저장해서 AWS의 S3에 저장하고 싶다.
어떻게 접근하면 될까?
해결책:
로그를 주기적으로 분리 저장하는 목적의 모듈이 있다.
log rotate 모듈이고, 대부분의 유닉스 시스템엔 이미 설치되어 있다.
검색해보니, 워낙 잘 작성한 포스트가 많아 링크로 대체한다.
How To Configure Logging and Log Rotation in Nginx on an Ubuntu VPS
- nginx log rotation 에 대한 개요. 전반적인 설명이 좋다
logrotate를 활용한 로그 관리 (compress, rotate)
- 한글로 쉽게 잘 설명해둔 포스트
HowTo: Rotate Logs to S3
- S3 연동까지 쉽게 설명해둠
Log rotate Apache Logs to Amazon S3
Sample log rotate configuration and troubleshooting
- 로그로테이트의 각 옵션에 대해 자세히 설명하고 있음
nicompress, delaycompress
- postrotate가 수행된 후에 압축이 실행된다.
논의:
설정 파일의 midsize, maxsize, size 에 대한 설명이 헷갈린다.
minsize size
로그가 size보다 크고, 지정한 시간 조건(daily/weekly/monthly)이 지났을 때 로테이트한다.
maxsize size
로그가 size보다 크거나, 지정한 시간 조건이 지났을 때 로테이트한다.
size
시간 조건은 무시하고, 로그가 특정 사이즈 이상일 때 로테이트한다.
logrotate 자체가 데몬으로 실행되지 않기 때문에, 여기서의 '시간 조건'은 logrotate.status에 저장되어 있는 시간을 기준으로 한다.
로그로테이트는 hourly 조건을 제공하지 않기 때문에 size를 사용하는 게 적합하다.
예)
로그가 30M 쌓이고, 하루가 지난 경우
minsize 50M
daily
-> 사이즈가 50M까지 쌓이지 않았으므로, 로테이트되지 않는다.
maxsize 50M
daily
-> 사이즈가 50M까지 쌓이지 않았지만, 시간 조건이 됐으므로 로테이트된다.
size 50M
daily
-> 시간 조건에 관계없이, 사이즈가 50M가 되지 않았으므로 로테이트되지 않는다.
로그가 80M씩 쌓이고, 하루가 지난 경우
minsize 50M
daily
-> 사이즈도 50M가 넘었고, 시간 조건도 됐으므로 로테이트된다.
maxsize 50M
daily
-> 사이즈도 50M도 넘었고, 시간 조건도 됐으므로 로테이트된다.
size 50M
daily
-> 시간 조건에 관계없이, 사이즈가 50M를 넘었으므로 로테이트된다.
로그가 80M 쌓이고, 1시간 지난 후 실행한 경우 (크론잡)
minsize 50M
daily
-> 사이즈는 50M를 넘었지만, 시간 조건에 해당되지 않으므로 로테이트되지 않는다.
maxsize 50M
daily
-> 시간 조건에는 해당되지 않지만, 50M가 넘었으므로 로테이트된다.
size 50M
daily
-> 시간 조건에 관계없이, 사이즈가 50M를 넘었으므로 로테이트된다.
----
로그 사이즈에 관계 없이 로그를 매일 쌓고 싶다면,
size 1
daily
로그 사이즈에 관계 없이 로그를 매 시간 쌓고 싶다면,
size 1
+ 크론잡으로 1시간 마다 호출한다.
정해진 사이즈로 로그를 쌓고 싶다면,
rotate 9999
size 50M
+ 크론잡을 짧은 주기로 호출한다. (하루에 로그가 얼마나 쌓이는지 확인하고 분배한다)
참고:
반응형