nginx: 로그 로테이트 적용하기 + 상세 설정

발생일: 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
+ 크론잡을 짧은 주기로 호출한다. (하루에 로그가 얼마나 쌓이는지 확인하고 분배한다)



참고:

저작자 표시 비영리 변경 금지
신고

카테고리

분류 전체보기 (682)
About me. (6)
Daylogs (647)
비공개 (0)
영어공부 (0)
My works - 추억 (29)