1. 들어가는 말

아파치로 웹사이트를 운영하다보면 로그 파일을 처리하지 못해 고민하는 경우
를 흔히 보게 됩니다. 어떻게 분석해야 하는지. 어떻게 관리해야 하는지 등
등..
저는 로그 파일 처리 방법을 cronolog를 애용하고 있습니다.
다양한 방법이있겠지만. cronolog가 하나의 대안이 될 수 있기에 여기에 소개
합니다.

cronolog는 아파치의 logrotate를 대신하는 유틸입니다.
두 유틸의 차이점은 logrotate는 특정 시간 간격으로 로그 파일을 교체해주지
만 cronolog는 yymmdd 에 따라 로그파일을 분할한다는 점입니다.

예를 들어 access_log.010920, access_log.010921 등이 가능해집니다.
(IIS에서는 기본으로 제공하는 기능이긴 하지만요..)

일/월/년 단위로 로그를 자르기 때문에 보관하기도 편하고 로그 분석할때도 편
합니다. 로그 파일이 무작정 커질일도 없고요..

2. 설치

필요한것:
apache (당연하겠죠)
cronolog http://www.ford-mason.co.uk/resources/cronolog/
압축푸는 프로그램, 컴파일러

다운받아서 컴파일하고 설치하면됩니다.
/usr/local/sbin/cronolog에 깔릴겁니다.

이제 httpd.conf 를 수정합니다.

3. 설정 & 예제

설정: TransferLog "|/usr/local/sbin/cronolog /www/logs/%Y/%m/%
d/access.log"
결과:
/www/logs/2001/01/01/access.log
/www/logs/2001/01/02/access.log

대문자 Y 를 소문자 y로 고쳤습니다.
설정: TransferLog "|/usr/local/sbin/cronolog /www/logs/%y/%m/%
d/access.log"
결과:
/www/logs/01/01/01/access.log
/www/logs/01/01/02/access.log

%d를 지우면 월단위로 남깁니다.
설정: TransferLog "|/usr/local/sbin/cronolog /www/logs/%y/%m/access.log"
결과:
/www/logs/01/01/access.log
/www/logs/01/02/access.log

한 디렉토리에 저장하는거도 가능합니다.
설정: TransferLog "|/usr/local/sbin/cronolog /www/logs/access.%Y%m%d"
결과:
/www/logs/access.20010101
/www/logs/access.20010102

비슷한거
설정: TransferLog "|/usr/local/sbin/cronolog /www/logs/www%Y%m%d.log"
결과:
/www/logs/www20010101.log
/www/logs/www20010102.log

access_log 로 심볼릭 링크를 걸수도 있습니다.
access_log에 심볼릭링크는 주기적으로 바뀌어서 지금 사용하는 로그파일이 됩
니다.
TransferLog "|/usr/local/sbin/cronolog --
symlink=/www/logs/access_log /www/logs/www%y%m%d.log"
/www/logs/access_log -> /www/logs/www20010102.log
/www/logs/www20010101.log
/www/logs/www20010102.log
로그분석 프로그램에서 로그파일을 지정해야 하는 하는 경우에 (예,
webalizer) access_log 를 지정하면 해당하는 날짜의 로그파일을 가리키겠
죠...

4. 본격 활용

문제:
아파치로 웹사이트를 운영하고 있는데 로그 분석을 해서 방문자 현황을 보고
싶다. 그리고 지나간 로그 파일을 날짜별로 정리해서 압축해서 보관하고 싶
다.

해결:
cronolog를 이용해 로그를 분할 저장합니다. 이때 심볼릭링크를 반드시 해야합
니다.
TransferLog "|/usr/local/sbin/cronolog --
symlink=/www/logs/access_log /www/logs/www%y%m%d.log"

그러면 로그는 이렇게 저장됩니다.
/www/logs/access_log -> /www/logs/www20010102.log
/www/logs/www20010101.log
/www/logs/www20010102.log

Webalizer의 conf 파일에서 분석할 로그 파일을 /www/logs/access_log 로 지정
합니다. 물론 history 보관 옵션을 on 해야 합니다.

crontab 파일을 열어 매일 23시 59분에 webzlizer를 실행하도록 세팅합니다.
성격이 급한 분은 매일/매시/59분으로 세팅해도 무방합니다.

매일 23시 59분에 cron에 의해 webalizer가 실행되며 access_log에 심볼릭링크
된 오늘자 아파치 로그를 분석하고 history에 저장합니다.
0시 0분이 되면 (새로운 접속이 있으면) 아파치(cronolog)는 새로운 날짜의 로
그파일을 만들고 access_log 에는 새로운 파일을 링크걸게 됩니다.
다시 23시 59분이 되면 cron이 webzlizer를 실행시키고, access_log를 분석하
는데 어제 날짜가 아닌 오늘 날짜의 파일을 분석합니다.

문제:
지나간 로그를 자동으로 압축하고 싶다.

해결:
파일을 압축하는 스크립트를 cron에 등록시켜 사용하면 됩니다.
예를 들면...
find /www/logs -name *.log -mtime +1 -exec gzip {} \;
2005/06/27 18:22 2005/06/27 18:22

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다