본문 바로가기

Developer/Knowledge Base

로그 로테이션 방법 장단점 비교


리눅스환경에서 로그파일을 날짜별 혹은 용량별로 쌓게 하는 다양한 방법들이 존재한다. 각각은 장단점을 갖고 있는데, 용도에 따라 어떤 방법을 선택할지 결정하는 것이 마땅하다. 선택포인트가 될  장단점을 비교해보았다...


1. logrotate(한글)

리눅스의 기본어플리케이션이며, 로그를 쌓을때 로테이션을 주도록하는 것이 아니라, 이미 쌓인 로그파일을 조작하는 방식이다. 보통 cron에 의해 주기적으로 호출되어 로테이션 로그파일을 만든다.

장점 : 로테이션, 압축, 파일갯수 제한등 각종 로그관련 작업들이 한방에 가능하다.

단점 : 파이프방식을 통해 쌓여지는 로그파일의 경우, 기존파일 삭제가 불가능하기 때문에(삭제하면 로그파일이 쌓이지 않기 때문에) 프로세스를 내렸다 올리는 스크립트를 설정하거나 copytruncate방식을 이용해야만 한다. 프로세스를 올렸다 내리는것은 서비스 운영에 지장을 줄 수 있고, copytruncate방식은 copy가 시작되는 시점과 truncate가 완료되는 시점 사이의 로그가 분실되게 된다. 또한 일정버전 이하(dateext를 쓸수없는)에서는 파일명을 날짜형태로 줄 수 없다.

2. cronolog

어플리케이션 구동시 로그 파일의 파이프를 cronolog프로세스로 지정하는 방식으로 사용한다.

장점 : 손실없는 완벽한 로그 로테이션이 가능하다

단점 : 별도의 프로세스 띄우고 이를 통해 로그를 쌓기 때문에 약간의 부하가 있다. 메인프로세스를 죽일때 함께 프로세스가 죽지 않는 경우가 있어 체크를 해줘야 한다. 파일용량에 따른 로테이션이 불가능하다. 압축과 삭제등은 별도로 해줘야 한다.

3. rotatelogs(한글)

Apache HTTP Server의 서브 어플리케이션이다. cronolog와 비슷하며, 용량별 파일로테이션을 지원한다.

장점 : cronolog와 같으며, 용량별 로테이션이 가능하다

단점 : cronolog와 같으며, Apache HTTP Server를 설치해야만 한다.


로그파일을 가지고 통계를 산출한다던가 할 때에는 정확성을 요하는 2/3번 방법을, 단지 버그추적을 위해서거나 만약을 대비하는 로그라면 설정과 유지보수가 간편한 1번 방법을 추천하겠다.