>> Delete No. 3037 article
No. cronolog 와 Webalizer 를 이용한 자동화 Script

등록 2002-11-12 13:59:00     조회 4
이름 조율    

		대용량 로그파일에 대한 분석요구가 점차 많아지면서, 자동화 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 로 보내
주십시요. 감사합니다.--외로우니까... 사람이다...
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved