2009. 5. 30. 16:10

Webalizer의 설치


웹사이트를 운영하다보면, 누가 사이트에 왔다갔는지, 아니면 어느시간에 가장 많이 오는지, 몇명이나 왔다갔는지 , 어떤 정보를 찾아 여기 까지 왔는지 분석할 필요성이 있다.
 
또한 날이 갈수록 심해지는 웹사이트에 대한  공격 IP로부터 사이트를 보호하는것도 사이트 운영자들이 할일이다.

그럼, 이런한 웹사이트 방문자에 대한 분석은 어디서 하느냐....?

Apache는  방문자와 방문자가 지나간 흔적을 고스란히 기록하는 훌륭한 史官의 기능을 가지고 있다.

바로 apache 디렉토리에 존재하는 logs 디렉토리 아래에 있는 access_log가 방문자와 방문자의 기록을 남긴 파일이다. 하지만 이 log파일을 보고 분석하기란 매우 힘들다. 방문자가 두어 페이지를 방문하고 갔다고 하더라도, 콘솔상에 3~4페이지에 달하는 기록을 남기기 때문에 빈번히 일어나는 웹사이트의 방문자에 대한 기록을 이 로그파일로 정보를 얻기란 매우 힘들기 때문이다. 그러므로 , 이 로그파일들을 분석해서 사이트 운영자에게 보고하여 주는 프로그램이 필요한데 그것이 바로 오늘 포스팅의 주제 Webalizer이다.

Webalizer는 아래의 사이트에서 얻을수 있다.

http://www.snowrice.com/freepds/925 (본인이 운영하는 프리웨어 자료실이다.)

http://www.webalizer.org/download.html



의존성 :
zlib-devel
libpng-devel
gd-devel

*/배포본(FC9) 설치후 바로 APM을 소스 컴파일설치한후, yum으로 확인한 결과 gd-level만 설치되지 않았다.  

Package zlib-devel-1.2.3-18.fc9.i386 already installed and latest version
Package 2:libpng-devel-1.2.24-1.fc9.i386 already installed and latest version

Installed: gd-devel.i386 0:2.0.35-5.fc9
Dependency Installed: fontconfig-devel.i386 0:2.5.0-2.fc9 freetype-devel.i386 0:2.3.5-4.fc9 gd.i386 0:2.0.35-5.fc9 libX11-devel.i386 0:1.1.4-1.fc9 libXau-devel.i386 0:1.0.3-5.fc9 libXdmcp-devel.i386 0:1.0.2-5.fc9 libXpm-devel.i386 0:3.5.7-4.fc9 libjpeg-devel.i386 0:6b-41.fc9 libxcb-devel.i386 0:1.1-4.fc9 mesa-libGL-devel.i386 0:7.1-0.29.fc9 xorg-x11-proto-devel.noarch 0:7.3-12.fc9
Complete! */

우선 , yum이나 apt-get명령으로 위의 의존성 문제를 해결하자. (yum이나 apt로 수월하게 설치된다. yum이 불가능하다면 아래의 yum포스팅을 참조) 

 
[root@localhost download]# wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.21-02-src.tgz
==> PASV ... done.    ==> RETR webalizer-2.21-02-src.tgz ... done.
Length: 536461 (524K)

100%[=====================================================================>] 536,461      104K/s   in 6.2s

2009-05-28 10:20:46 (85.1 KB/s) - `webalizer-2.21-02-src.tgz' saved [536461]

FINISHED --2009-05-28 10:20:46--
Downloaded: 2 files, 534K in 6.2s (86.4 KB/s)
[root@localhost download]# ls
index.html  webalizer-2.21-02-src.tgz

[root@localhost download]# tar -xvf webalizer-2.21-02-src.tgz
webalizer-2.21-02/
webalizer-2.21-02/CHANGES
.
.
webalizer-2.21-02/lang/webalizer_lang.turkish
webalizer-2.21-02/lang/webalizer_lang.ukrainian
webalizer-2.21-02/webalizer_lang.h
[root@localhost download]#
[root@localhost download]# cd webalizer-2.21-02
[root@localhost webalizer-2.01-10]# ./configure --with-language-korean
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether ln -s works... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... 64
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking whether char is unsigned... no
checking for u_int64_t... yes
checking whether altzone is declared... no
checking for main in -l44bsd... no
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking for main in -lm... yes
checking math.h usability... yes
checking math.h presence... yes
checking for math.h... yes
checking for main in -lz... yes
checking for gzrewind in -lz... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for main in -lpng... yes
checking for main in -lgd... yes
checking for gdImagePng in -lgd... yes
checking gd.h usability... yes
checking gd.h presence... yes
checking for gd.h... yes
checking for main in -ldb... no
configure: WARNING: libdb not found.. DNS/GeoDB code disabled!
checking for language file... yes - english
configure: creating ./config.status
config.status: creating Makefile
config.status: linking ./lang/webalizer_lang.english to webalizer_lang.h
configure: Done.  Type 'make' to continue with build.
[root@localhost webalizer-2.21-02]# make
gcc -Wall -O2  -DETCDIR=\"/usr/local/etc\" -DGEODB_LOC=\"/usr/share/GeoDB\" -DPACKAGE_NAME
.
.
H=1 -DHAVE_MATH_H=1  -c wcmgr.c
gcc  -o wcmgr wcmgr.o
[root@localhost webalizer-2.21-02]# make install
mkdir -p /usr/local/bin
mkdir -p /usr/local/share/man/man1
mkdir -p /usr/local/etc
/usr/bin/install -c webalizer /usr/local/bin/webalizer
/usr/bin/install -c wcmgr /usr/local/bin/wcmgr
rm -f /usr/local/bin/webazolver
ln -s webalizer /usr/local/bin/webazolver
/usr/bin/install -c -m 644 webalizer.1 /usr/local/share/man/man1/webalizer.1
/usr/bin/install -c -m 644 wcmgr.1 /usr/local/share/man/man1/wcmgr.1
rm -f /usr/local/share/man/man1/webazolver.1
ln -s webalizer.1 /usr/local/share/man/man1/webazolver.1
/usr/bin/install -c -m 644 sample.conf /usr/local/etc/webalizer.conf.sample <- 설치완료
[root@localhost webalizer-2.21-02]#

설치가 끝나면.. 이제 자신이 운영하는 사이트들에 대하여 각기 세팅을 해주어야 한다.
webalizer는 자체로 웹의 방문정보를 수집하지 않는다. 아파치의 로그파일을 토대로 분석을 해주므로, 각 사이트들마다 로그파일을 만드는것도 아파치 설정에서 해주어야 한다.

httpd-virtualhost.conf의 내용을 수정하자.
설정은 간단하다. 각 버추얼호스트에서 정의해준 사이트들에 로그파일을 생성할 정보를 만들어 주면 그만이다.
버추얼호스트를 운영하지 않는 단독 도메인 사이트라면, 별다른 설정없이 /usr/local/httpd/logs/access_log 파일(아파치설치 디렉토리의 logs)을 이용해서 webalizer설정을 하면 된다.

버추얼호스팅을 위한 로그파일들은 access_log파일이 존재하는 디렉토리에 생성하여 주면 된다. 웹사이트를 방문하는 관리자는 사이트의 로그파일을 볼 필요가 없다. root계정으로 webalizer가 로그파일을 참조해서 관리자가 볼수있는 그래프그림파일과 html파일을 만들어준다.

 <VirtualHost *:80>
    DocumentRoot /home/bestakas/public_html
    ErrorLog logs/bestakas.com_error_log
    CustomLog logs/bestakas.com_access_log common
    ServerName bestakas.com
    ServerAlias *.bestakas.com
</VirtualHost>


CustomLog logs/bestakas.com_access_log common
만약 /usr/local/httpd가 아파치 설치 디렉토리라면, bestakas.com_access_log파일은 /usr/local/httpd/logs 디렉토리에 생성하게 된다. (apache가 재기동되면 bestakas.com_access_log파일을 생성하며 기동된다.) 

파일명은 자신이 식별할수 있는 파일명으로 설정해주면 좋으나, 많은 도메인을 관리하는 서버의 경우, 후에 식별하기 어려우니 도메인_access_log로 해주는것이 좋을듯 하다.

apache를 재기동하자.

 [root@localhost logs]# /usr/local/httpd/bin/httpd -k restart
[root@localhost logs]# ls /usr/local/httpd/logs/
access_log                     bestakas.com_error_log           bestakas.com_access_log
apachestart.log                dummy-host.example.com-access_log   dummy-host.example.com-error_log    cgisock.18090  cgisock.3017     dummy-host2.example.com-access_log   error_log             httpd.pid                           ssl_request_log
[root@localhost logs]#
웹사이트의 로그파일들이 생성되었음을 알수있다.

이제 webalizer용 사이트별 설정파일을 만들어주어야 한다. 
 [root@localhost local]# cd /usr/local/bin
[root@localhost bin]# ls
cjpeg  djpeg  jpegtran  rdjpgcom  wcmgr  webalizer  webazolver  wrjpgcom
[root@localhost bin]#

실행파일은 ./configure --with-language-korean로 컴파일했을경우 /usr/local/bin에 위치한다.

[root@localhost local]# cd /usr/local/etc
[root@localhost etc]# ls
webalizer.conf.sample
[root@localhost etc]#

설정파일은 /usr/local/etc은 위치하게 된다. cp명령으로 sample용 설정파일을 bestakas.com.conf로 복사하자. (임의로 설정하여도 된다.)
 [root@localhost etc]# cp /usr/local/etc/webalizer.conf.sample /usr/local/etc/bestakas.com.conf
[root@localhost etc]# ls /usr/local/etc
bestakas.com.conf  webalizer.conf.sample
[root@localhost etc]#


bestakas.com.conf를 열어 아래와 같이 설정파일을 바꾸어 주자.
 LogFile        /usr/local/httpd/logs/bestakas.com_access_log <버추얼호스팅 설정에서 만든 로그파일의 전체경로를 입력한다>
OutputDir      /home/bestakas/public_html/weblog < 클라이언트 브라우져에서 읽을수 있도록 html과 그림파일들이 생성될 디렉토리를 입력한다. 보통 사이트가 위치한 사이트 루트디렉토리 아래에 만들어준다. >
ReportTitle    BESTAKAS.COM <webalizer화면에서 타이틀로 표시될 이름이다. 보고서 이름에 적당한걸 입력한다..
HistoryName     bestakas.com <webalizer는 로그파일로 부터 읽은 정보를 여기서 설정한 파일로 기록한다.> 
HostName       www.snowrice.com <사이트의 도메인을 입력하면 된다.>

OutputDir은 먼저 디렉토리를 먼저 생성해주어야 한다. 
< #mkdir /home/bestakas/public_html/weblob
   #chmod 707  /home/bestakas/public_html/weblob
   #chown 사용자계정.사용자그룹 /home/bestakas/public_html/weblob 

 */etc/skel 디렉토리에 계정생성과 동시에 함께 생성될수 있도록 하는것도 좋은 팁이다.>

설정파일을 만들어주었으면, 셀스크립트를 작성하여 주어야 한다.

만약 서버에서  www.bestakas.com과 www.test.com을 운영한다고 가정하여 본다면,
루트가 접속하면 실행하기 좋은 디렉토리를 선택하여 셀스크립트를 작성하자. (예: /root/)

 [root@localhost bin]# vi webalizer.sh
#!/bin/bash

/usr/local/bin/webalizer -c /usr/local/etc/bestakas.com.conf > /home/bestakas/public_html/weblog/bestakas.com
/usr/local/bin/webalizer -c /usr/local/etc/test.com.conf > /home/test/public_html/weblog/test.com

/wealizer실행파일경로/webalizer -c /사이트 webalizer설정파일전체경로 > /OutputDir/historyName

의 방식으로 bestakas.com과 test.com에 대한 webalizer 셀스크립트 파일을 작성하였다.

이제 자신의 만든 셀스크립트 파일을 실행하면 Outdir에 bestakas.com파일을 생성하게 된다. 주의할점은 webalizer는 실행하면 그당시에만 실행된다는 점이다. 데몬처럼 백그라운드에서 계속 실행되지 않는다. 아마 데몬형식으로 실시간으로 실행되면 웹서버의 속도는 현저히 떨어지게 되므로 실행할경우에만 webalizer가 로그분석 보고서를 만들게 된다.

데몬이 아닌 이유로 정기적으로 webalizer를 실행시켜주어야 할 필요가 있다. 크론명령으로 정기적으로 webalizer가 기동될수 있도록 설정하며, 시스템이 재기동 할때 webalizer가 실행될수 있도록 하자.

[root@localhost]#crontab -e
00   05  * * *  su - root -c /root/webalizer.sh

(/root/는 webalizer.sh가 존재하는 디렉토리 경로이다.)

[root@localhost]#vi /etc/rc.local
/root/webalizer.sh

이렇게 설정하면 매일 새벽 5시에 웹로그 분석을 위한 보고서를 만든다. 보통 새벽에 많이 실행하는 이유로는 웹사이트를 많이 공급하는 웹서버는 webalizer자체로 시스템 부하가 생길수 있으므로 사용자들이 가장 적게 활동하는 새벽 5시경이 좋기 때문이다.

확인은 새벽 5시에 해보기로 하고...
 [root@localhost]#/root/webalizer.sh


셀스크립트를 실행하면
OutputDir에 HistoryName파일이 생겼는지 확인하여 보자
 [root@localhost ~]# ls /home/bestakas/public_html/weblog/
bestakas.com

HistoryName이 생성되었다.
[root@localhost ~]#vi /home/bestakas/public_html/weblog/bestakas.com
Webalizer V2.01-10 (Linux 2.6.18-1.2798.fc6) English
Using logfile /opt/lampp/logs/snowrice.com_access_log (clf)
Creating output in /home/bestakas/public_html/weblog
Hostname for reports is 'www.snowrice.com'
Reading history file... snowrice.com
Generating report for May 2009
Generating summary report
Saving history information...
xxxxx records in 0.24 seconds

이런식으로 bestakas.com이 생긴다면 일단 webalizer의 설치는 성공하였다.
실험을 위하여 클라이언트 브라우져서 설정한  웹사이트를 방문하여 보자. 방문하여 게시판에 test를 하여보고..다운로드등..확인을 위하여 여러가지 작업을 하여보자. 새로 로그파일을 생성하였기 때문에, 아직 방문기록이 없으므로 로그파일 작성을 위해 여러가지 수작을 해보는것이다.

어느정도 되었다면 다시 셀스크립트를 실행하여 준다.
[root@localhost]# /root/webalizer.sh
[root@localhost ~]# ls /home/bestakas/public_html/weblog/
ctry_usage_200905.png   hourly_usage_200905.png  bestakas.com  usage_200905.html
daily_usage_200905.png  index.html               usage.png

위와같이 png파일들이 생겼다면, 설치는 성공한것이다.
웹브라우져에서 http://도메인/OutputDir/index.html을 실행한다.
(위의 설정이라면 http://www.bestakas.com/weblog/index.html이 되겠다.)

'manabu &amp; Linux' 카테고리의 다른 글

페도라코어에서 putty 한글 사용법  (2) 2009.06.18
Linux lastlog  (0) 2009.05.31
제로보드XE 통째로 서버이전하기  (2) 2009.05.29
Yum이 갑자기 안될때...  (0) 2009.05.28
Proftp의 설치  (0) 2009.05.28