apache 로그파일 관리하기

웹서비스를 운영하다보면, 로그파일 용량이 계속 늘어나 디스크 용량을 가득 채워서 서버에 장애가 발생한는 경우가 있다.

이런 경우는 log rotate를 설정하여, 주기적으로 로그파일을 순환하고, 오래된 파일은 삭제를 해 줘야 한다.

1. logrotate를 이용한 logfile 관리

리눅스의 기본 패키지인 logrotate 패키지를 이용해서 apache의 로그를 주기적으로 순환시키고 오래된 로그는 삭제 하는 설정이다.
/etc/logrotate.d 디렉토리에 아래와 같이 apache log를 관리 하도록 설정 파일을 생성한다.

[root@localhost logrotate.d]# cat /etc/logrotate.d/apache

/usr/local/apache/logs/*_log {
weekly
rotate 8
missingok
create 0600 root root
postrotate
/bin/kill -HUP `cat /usr/local/apache/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

위 설정은 일주일 단위로 로그파일의 이름을 변경하여 순환시키며, 8주간 보관하고 8주가 지난 로그파일은 삭제 하도록 하는 설정이다.
설정을 변경하여 필요한 기간만큼 보관하고 자동으로 삭제가 가능하다.

2. apache rotatelogs 명령을 이용한 logfile 관리

apache 설정파일 내에서 rotatelogs 명령을 이용하여 로그파일을 관리 하는 설정이다.
rotatelogs는 아파치에 포함된 프로그램이며, httpd.conf 파일의 로그 설정이나 httpd-vhosts.conf 파일의 가상호스트 설정에서
아래와 같은 형태로 설정해서 apache log파일을 rotate 할 수 있다.

CustomLog “|/usr/local/apache/bin/rotatelogs logs/add4s.com-access_log 86400” common

-> /usr/local/apache/logs/add4s.com-access_log 파일을 만든다.
순환 기간(86400초)이 지나면, /usr/local/apache/logs/add4s.com-access_log.nnnn 의 형태로 로그파일을 순환시킨다.(nnnn은로그를 시작한 시스템시간이다 )

CustomLog “|/usr/local/apache/bin/rotatelogs logs/add4s.com-access_log 50M” common
-> 이 설정은 로그파일 크기가 50 메가바이트가 될때마다순환한다.

ErrorLog “|/usr/local/apache/bin/rotatelogs logs/add4s.com-error_log.%y-%m-%d-%H_%M_%S 50M”
-> 이 설정은 에러로그 파일 크기가 50 메가바이트가 될때마다 add4s.com-error_log.yy-mm-dd-HH_MM_SS와 같은 형태로 오류로그 파일을 만들어서 순환시킨다.

apache rotatelogs 설정은 주기적으로 새로운 로그파일을 생성하기는 하지만, 시간이 지난 로그파일을 삭제하지는 않기 때문에,
주기적인 삭제가 필요한 경우는 cron 설정으로 오래된파일을 주기적으로 찾아서 삭제하는 스크립트가 별도로 필요하다.