대용량 로그파일에 대한 분석요구가 점차 많아지면서, 자동화 Script 의 필요성으로 인해
작성하였습니다. 비록 허접한 Script 이지만, 많은분들이 편리하게 이용할 수 있었으면 합니
다. 또한, 제가 작성한 스크립트를 조금만 수정한다면 쉽게 자신에게 맞게 고쳐쓸 수 있을
것입니다. 존칭을 생략한점 양해바랍니다.
사용환경
CPU : Athlon XP 1600+
O/S : Red Hat Linux release 7.2 (Enigma)
필요한 것들
1. Apache Webserver + PHP
2. cron
3. Cronolog
4. Webalizer
설치
URL : http://www.apache.kr.net/dist/log-analyzer/ 에서 Cronolog 와 Webalizer 를
다운로드 받는다.
각각의 설치는 Src 를 풀고 해당디렉토리에서
# ./configure && make && make install
로 쉽게 설치할 수 있다.
자세한 설치방법 및 상세한 옵션을 알고싶으면 각 README File 을 참조한다.
Script 작성 배경
Webalizer 는 쉽게 로그파일을 분석해주지만, 짧은 시간에 대량의 로그가 쌓일경우 하나의 로
그파일로 보여줄 수 없다. 따라서, 각 기간별로 분리해서 자동으로 파일을 생성시켜주는
스크립트가 필요하게 되었다. 간략설명 1. CronoLog 를 이용하여 Apache 의 Weblog 를 원하는 기
간별로 분리하여 쌓이게 한다. 2. 작성한 Shell Script 를 이용하여 Webalizer 를 해당기간별로 Web
Directory 에 생성되게 하도록 Cron 에 등록시킨다. 3. 작성한 PHP Script 를 이용하여 WebDirectory
에 생성된 날짜별로 로그를 보여주는 링크를 생성한다. 상세설명
1. cronoLog 를 이용한 Apache Weblog 기간별 분리
: Apache + PHP 가 미리설치되어있어야 한다. 또한 위의 '설치'부분에서 설명한대로 cronoLog 를
: 설치하여야 한다. 그 상태에서 Apache 의 설정파일인 httpd.conf 의 로그 설정부분을 아래와 같이 변경한다.
TransferLog "|/usr/local/sbin/cronolog /var/log/httpd/%Y/%m/%d/access.log"
ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/%Y/%m/%d/errors.log"
위의 예제는 일별 로그를 각각의 Directory 에 access.log , errors.log 에 쌓이도록 한 것이다. 월
별로 쌓이길 원한다면 %d 부분을 삭제하면 될것이다. 또한 Virtual Host 를 이용하여 여러 도메
인에 서비스 할 경우 위의 로그 부분을 각 Virtual Host 부분에 설정하면 된다. 물론, httpd 다음
에 각 account 로 naming 을 해주면 더욱 보기 좋을것이다. 이해가 가지 않는다면 아래의 예제
를 보세요. TransferLog "|/usr/local/sbin/cronolog /var/log/httpd/joyul/%Y/%m/%d/access.log"
ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/joyul/%Y/%m/%d/errors.log"
참고로 cronoLog 의 설치가 정상적으로 되었는지 Testing 할수 있는 프로그램이 소스에 포함되
어있다. $ ./src/cronotest "%Y/%m/%d/access.log" 4
위와 같이 사용하면 될것이고, 자세한 방법은 역시 README File 을 참조하세요.
2. Scrip 를 이용한 Webalizer 파일의 생성
: 이제 로그는 기간별로 쌓이게 되어있으므로, 다음은 Webalizer 를 이용하여 각 기간별로 생
: 성된 로그를 WebDirectory 에 차곡차곡 만들어주면 된다.
그것은 필자가 작성한 아래의 스크립트를 이용하시라!
조금 허접하더라도 참으시라.. -_-;;;
-------------------------------------------------------------------- make_Webalizer.sh
#!/bin/bash
#Creator : joyul at blues.pe.kr #Date : 2002.11.11
#Update : None
#Webalizer 를 자동으로 WebDirectory 에 생성시키는 스크립트
#하루전날 로그에 대해서 생성시키며 Cron 에 적당한 시간에 등록시킨다. 새벽 5시정도?
#10일이 지난 로그는 삭제한다. 조정가능
#로그파일이 생성되는 디렉토리
LOG_DIR="/var/log/httpd"
# 현재 날짜를 이용하여 하루전날 날짜를 구함
NOW_DATE=$(date "+%Y/%m/%d" --date "1 days ago")
# 현재 날짜를 이용하여 몇일전의 로그를 삭제할것인지 구함 (변경가능)
DEL_DATE=$(date "+%Y%m%d" --date "10 days ago")
#로그파일이름 설정
LOG_FILENAME=$LOG_DIR"/"$NOW_DATE"/access.log"
#로그를 쌓게할 Web Directory 설정
DEFAULT_OUT_DIR="/home/httpd/html/log"
#해당 로그일을 Directory Name 으로 정함 , 삭제의 용이성을 고려하여
LOG_DAY_DIR=$(date "+%Y%m%d" --date "1 days ago")
OUT_DIR=$DEFAULT_OUT_DIR"/"$LOG_DAY_DIR
# 로그 Directory 생성
mkdir $OUT_DIR
# Webalizer 를 이용하여 LogFile 분석하고 해당파일들을 로그 Directory 에 생성
/usr/local/bin/webalizer -Q $LOG_FILENAME -o $OUT_DIR
# 삭제기간이 지난 Direcotry 에 대한 삭제
cd $DEFAULT_OUT_DIR
for FILE in *
do
if [ $FILE -le $DEL_DATE ]
then
rm -rf $FILE
fi
done
exit 0;
--------------------------------------------------------------------------------------------
위의 스크립트를 vi 를 이용하여 생성시키고, 실행가능하도록 권한을 변경한다.
#chmod +x make_webalizer.sh
그런다음 부하가 적은 새벽시간에 Cron 을 이용하여 실행시킨다.
0 5 * * * /root/make_webalizer.sh
3. Web 에서 기간별 Webalizer File 을 볼 수 있도록 PHP Script 를 이용한다.
----------------------------------------------------------------------viewlog.html
<?
/***********************************************************
Title : Log Directory Display
Creator : Joyul at blues.pe.kr Date : 2002.11.11
Update : None
Descreption
Cronolog 와 webalizer 를 이용한 자동 Rotate Log Script
로 생성된 파일들을 날짜별로 생성된 디렉토리로 보여주는
스크립트
***********************************************************/
$LOG_DIR = "/home/httpd/html/log";
$d = dir($LOG_DIR);
while (false !== ($entry = $d->read()))
{
if($entry != "." && $entry != "..")
{
if(is_dir($entry))
{
$year = substr($entry,0,4);
$month = substr($entry,4,2);
$day = substr($entry,6,2);
$logday = $year."년 ".$month."월 ".$day."일";
echo "<a href='./".$entry."' target='".$entry."'>".$logday." 로그보기</a><br>";
}
}
}
$d->close();
?>
------------------------------------------------------------------------------------------
위의 파일을 Log File 이 생성된 Directory, 여기서는 home/httpd/html/log 에 넣어두고, 해당파일에
링크를 걸면, Log Directory List 가 생성된다. 문의 사항 및 개선점들은 joyul at blues.pe.kr 로 보내
주십시요. 감사합니다.--외로우니까... 사람이다...