linux

Total 136
Today 0
profile_image
ino
03-06-11 10:38 0개 3,026회
cronolog를 이용한 아파치 로그관리
출처 : http://www.oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsFAQ&no=82&page=1&o[sc]=a&o[ss]=logro&o[st]=a&o[at]=s&o[sct]=s&o[stt]=s



항상 김정균님의 도움을 많이 받고 있습니다.



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 {} \;





--


댓글목록

등록된 댓글이 없습니다.