반응형

서비스를 리눅스에서 운영하다보면 하염없이 로그가 쌓여만 가는 경우가 발생합니다. (디스크 팡팡)

어플리케이션에서 로그를 알아서 정리해주는 경우면 좋겠지만 그렇지 않은 경우도 있기 때문에 전체적으로 로그를 정리해주는게 필요합니다.


쉘 스크립트를 작성해서 정리해주는 방법도 있지만 이번엔 apache의 logrotate 을 이용해 로그를 정리하는 방법을 공유합니다.


전제 조건으로는 apache가 설치되어 있어야합니다.


그리고 다음과 같이 /etc/crontab 파일에 corn.시리즈들이 등록되어있어야 주기적으로 logrotate가 실행됩니다.

(/etc/cron.daily 아래에 logrotate 파일이 있어야 합니다.)


vi /etc/crontab


1
2
3
4
5
6
7
8
9
10
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
 
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly




아래 위치로 이동해 봅니다.

1
cd /etc/logrotate.d/



여러 파일이 보일텐데 여기에 우리가 정리하고자 하는 로그들과 정책을 정의하는 파일을 생성합니다.


tomcat을 예를 들어보겠습니다.

/etc/logrotate.d에 tomcat 파일을 만듭니다.


1
vi tomcat



내용은 아래처럼 설정합니다.


1
2
3
4
5
6
7
8
9
10
11
/svc/tomcat/tomcat7/*/logs/*.out {
 copytruncate
 maxsize 500M
 daily
 rotate 30
 compress
 missingok
 notifempty
 dateext
}



copytruncate : 기존 파일을 백업해서 다른 파일로 이동하고 기존 파일은 지워버리는 옵션

(이옵션을 넣지 않으면 현재 사용중인 로그를 다른이름으로 move하고 새로운 파일을 생성한다.)

(이옵션을 활용하면 postrotate를 통한 서비스 재시작 없이 무중단 로깅이 가능하다.)

maxsize : 파일 최대크기로 최대크기가 넘으면 로테이션하고 최대크기가 넘지 않으면 daily로 로테이션

daily : 로그파일을 날짜별로 변환

compress : 지나간 로그파일들을 gzip으로 압축

dateext : 순환된 로그파일의 날짜확장자

missingok : 로그파일이 없더라도 오류를 발생시키지 않음

rotate 30 : 로그 파일은 30개만큼 저장된 다음 제거되거나 메일로 보내짐

notifempty : 파일의 내용이 없으면 새로운 로그 파일을 생성 안함

maxage 30(숫자) : 30일 이산된 로그 파일 삭제


테스트는 다음 명령어를 이용해서 하면됩니다.

1
2
3
4
5
#디버그 모드 실행 (실제로 실행되지 않는다.)
/usr/sbin/logrotate -/etc/logrotate.conf
 
#강제 실행
/usr/sbin/logrotate -f/etc/logrotate.conf



반응형

+ Recent posts