PHP

apache log 파일 컨트롤하기

Bucket List 2005. 12. 24. 10:23

몇가지 참고사항으로 아셔야 할 부분 몇가지 적어보겠습니다.

우선 access_log 파일에 저장되는 정보를 가장 최대치로 해야겠지요.
이 말은...apache 설정 파일인 httpd.conf 파일을 보시면 아래와 같은 부분이 있습니다.

예제1)
LogFormat "%h %l %u %t \"%r\"%>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\"%>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

그리고 access_log 파일을 저장하기 위해서 위 내용 바로 아랫쪽에 이런 내용이 있구요.

예제2)
CustomLog /usr/local/apache/logs/access_log common

위 라인 마지막에 common 이라고 있습니다. 이것이 예제1) 에서 두번째 라인에 있는 포맷을 사용하겠다는 설정입니다. 자 그럼 예제1)에 있는 포맷들 중에 가장 첫번째 있는 포맷이 나머지 아래에 있는 포맷 모두를 포함하고 있는 포맷입니다.(포맷 정보는http://www.apache.org 에 메뉴얼을 참고하세요.)

그렇기에

예제3)
CustomLog /usr/local/apache/logs/access_log combined

예제3)과 같이 해준다면 access_log 파일 기록시 많은 정보를 기록하게 됩니다.

위와 같이 설정을 해놓으셨다면...이제 PHP로 해당 파일을 읽어 들이면 되겠네요.

예제4)

<?
$file = "/usr/local/apache/logs/access_log";

$content = file($file);
foreach($content as $line) {
echo $line."<br>";
}
?>

위 예제를 실행시키면 access_log 파일에 내용이 모두 출력됩니다.
foreach() 구문이 루프를 돌면서 한 줄씩 출력을 해준답니다.
이제 각 줄에 저장되어 있는 내용을 구분하여 분석하는 루틴을 작성하면 되겠지요.
(분석 소스는 직접...^^)

그리고 중요한 것이 하나 있습니다.
바로 access_log 가 쌓이고 쌓이다 보면 용량이 엄청나게 커진다는 것입니다.
이런 경우 웹서버가 엄청 버벅대지요...ㅡㅡ;
(참고로 웹서버가 좀 느려졌다는 느낌이 들경우 access_log 나 error_log 파일의 용량을 확인해 보는 것이 중요하답니다.)

이런 경우 때문에 logrotate 또는 cronolog 등과 같은 프로그램이 있답니다. 지정한 시간 또는 날짜 별로 로그 파일을 백업을 만들고 새로운 파일로 대처해주는 프로그램이지요.

허나 이런 프로그램을 사용할 경우 중요한 것은 위 프로그램이 작동하기 전에 이전 데이터를 저장해야 한다는 것입니다. 전체 내용을 저장하는 것이 아닌 결과만 저장하면 되겠지요.

음 도움이 되었는지 모르겠네요..더 혼란 스럽게 만든것은 아닌지...ㅡㅡ;;;;
암튼 멋진 로그분석기 만드시길 바라면서...이만.
즐거운 하루되세요.