웹서비스를 운영하다보면, 로그파일 용량이 계속 늘어나 디스크 용량을 가득 채워서 서버에 장애가 발생한는 경우가 있다.
이런 경우는 log rotate를 설정하여, 주기적으로 로그파일을 순환하고, 오래된 파일은 삭제를 해 줘야 한다.
그러나 아두이노 연동 등을 위해 로그파일을 보관해야하는 경우도 있다.
리눅스의 기본 패키지인 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주가 지난 로그파일은 삭제 하도록 하는 설정이다.
설정을 변경하여 필요한 기간만큼 보관하고 자동으로 삭제가 가능하다.
# yearly : 매년
# monthly : 매월
# weekly : 매주
# daily : 매일
# keep 4 weeks worth of backlogs
rotate 5 #정리할 로그의 개수를 지정하는 부분입니다 로그 회전주기에 따라 진행
# create new (empty) log files after rotating old ones
create
# 로그파일을 정리한 후 로그파일을 생성여부입니다
# create : 로그파일 생성
# empty : 로그파일 생성 안함
# use date as a suffix of the rotated file
# Logrotate가 실행한뒤 로그파일에 날짜를 부여합니다
dateext
# uncomment this if you want your log files compressed
# 로그파일 압축여부 입니다 - (압축하여 로그파일의 크기를 조절할수 있습니다)
compress
# compress : 로그파일 압축
# /etc/logrotate.d/apache 상세설명
daily : 일단위로 실행합니다
rotate 5 : 회전 주기를 설정합니다
notifempty : 로그파일의 내용이 없을경우 rotate 하지 않습니다
missingok : 로그파일이 없을경우 에러메시지를 출력하고 다음으로 실행합니다
compress : 로그파일을 압축합니다
sharedscripts : 여러개의 로그파일을 스크립트로 공유하여 실행합니다
postrotate : 실행 후 스크립트 파일 실행합니다
/server/apache2/bin/apachectl graceful
endscript : 실행 후 스크립트 파일 실행합니다
Logrotate(로테이트) 실행
[root@server ~]# /usr/sbin/logrotate -f /etc/logrotate.d/apache2
Logrotate(로테이트) 디버그 모드
[root@server ~]# /usr/sbin/logrotate -d /etc/logrotate.d/apache2
Logrotate(로테이트) 실행과정 화면의 표시
[root@server ~]# /usr/sbin/logrotate -v /etc/logrotate.d/apache
참조 : https://server-talk.tistory.com/271
참조 : http://faq.add4s.com/?p=458