티스토리 뷰

cronolog 와 Webalizer 를 이용한 자동화 Script 
 
대용량 로그파일에 대한 분석요구가 점차 많아지면서, 자동화 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 를 해당기간별로
WebDirectory 에 생성되게 하도록 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 "".$logday." 로그보기
\n";
}
}
}
$d->close();
?>
-------------------------------------------------------------------------
-----------------

위의 파일을 Log File 이 생성된 Directory, 여기서는 home/httpd/html/log
에 넣어두고, 해당파일에 링크를 걸면, Log Directory List 가 생성된다.

문의 사항 및 개선점들은 joyul at blues.pe.kr 로 보내주십시요.
감사합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크