Webalizer 설치 GeoIP 국가별 국기 설정 - 웹 로그 분석

Last Updated on 12월 19, 2020 by 태랑(정현호)

Webalizer


Webalizer 는 Access Log를 분석하여 일별통계,시간대별통계,URL,Entry,Exit,사이트,레퍼럴,Search,에이전트,국가 정보 형태로 분석해 주는 툴 입니다.






설치 환경
OS : Centos 7.8
Apache : 2.4
nginx : 1.19.4
Webalizer : 2.23-08




Webalizer 설치


# EPEL Repository 등록

[root]# yum -y install epel-release yum-utils




# 사전 필요 패키지 설치
[root]# yum -y install GeoIP GeoIP-data \
libdb-devel perl-Geo-IP \
GeoIP-devel python-ipaddr \
libpng bzip2-devel gd-devel \
libdb-devel libpng \
libpng-devel





webalizer 다운 로드 및 컴파일

[root]# wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.23-08-src.tgz
[root]# tar zxvf webalizer-2.23-08-src.tgz


[root]# cd webalizer-2.23-08
[root]# ./configure --prefix=/usr/local/webalizer --enable-geoip \
--enable-bz2 --enable-geodb --enable-dns \
--with-language=korean --enable-flags
    ==> 한글로 컴파일 합니다.






빌드

[root]# make;make install






make 중에 발생되는 아래와 같은 유형의 warning 은 그냥 무시하고 설치를 진행 합니다.

wcmgr.c:940:24: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘u_int64_t’ [-Wformat=]
t_rec, in_file, out_file);






### GeoDB.dat 파일 다운로드
[root]# wget ftp://ftp.mrunix.net/pub/webalizer/geodb/geodb-latest.tgz
[root]# tar xvfz geodb-latest.tgz
[root]# mv GeoDB.dat /usr/share/GeoIP/
[root]# ls -al /usr/share/GeoIP/GeoDB.dat





이제는 conf 파일을 생성 하겠습니다.
conf 파일은 분석 하고자 하는 웹 사이트 단위로 생성 하시면 됩니다.

aaa1.com 과 aaa2.com 2개를 virtualhost 로 운영 중이라면 2개의 설정파일을 생성 하면 됩니다.



apache 와 nginx 용 2개를 생성 하겠습니다.

[root]# cd /usr/local/webalizer/etc/
[root]# vi aaa.com.conf

파일 내용은 아래 내용을 복사 해서 사용 하시면 됩니다.
이중에서 수정이 필요한 부분만 설명 드리겠습니다.


ReportTitle aaa.com
LogFile /var/log/httpd/aaa.com-access_log
OutputDir /websource/weblog-aaa.com
HostName aaa.com

GeoDB yes
GeoDBDatabase /usr/share/GeoIP/GeoDB.dat
GeoIP yes
GeoIPDatabase /usr/share/GeoIP/GeoIP.dat

Incremental yes
IncrementalName webalizer.current
HistoryName webalizer.hist

CountryGraph yes
CountryFlags yes
FlagDir flags

PageType htm*
PageType cgi

HideURL *.gif
HideURL *.GIF
HideURL *.jpg
HideURL *.JPG
HideURL *.png
HideURL *.PNG
HideURL *.ra



아래 4개의 설정 내용을 사용하는 환경에 따라 변경 합니다.
특히 경로와 파일명은 사용 중인 경로와 파일명을 기재를 해야 합니다.

포스팅에서는 webalizer 파일 이 생성될 위치를 /websource/weblog-aaa.com 로 설정 하겠습니다.

그리고 분석할 Access 로그에 대한 파일명은 LogFile 에 입력하시면 됩니다.

포스팅 예제에서는 /var/log/httpd/aaa.com-access_log 파일을 읽어서 분석하게 됩니다.
LogFile /var/log/httpd/aaa.com-access_log


위치 및 파일명등은 모두 샘플(예시)입니다.

ReportTitle aaa.com
LogFile /var/log/httpd/aaa.com-access_log
OutputDir /websource/weblog-aaa.com
HostName aaa.com





nginx 용 생성
그 다음은 nginx 용으로 하나더 생성 하겠습니다.
[root]# cd /usr/local/webalizer/etc/
[root]# vi bbb.com.conf


ReportTitle bbb.com
LogFile /var/log/nginx/bbb.com.access.log
OutputDir /websource/weblog-bbb.com
HostName bbb.com 
GeoDB yes
GeoDBDatabase /usr/share/GeoIP/GeoDB.dat
GeoIP yes
GeoIPDatabase /usr/share/GeoIP/GeoIP.dat
Incremental yes
IncrementalName webalizer.current
HistoryName webalizer.hist
CountryGraph yes
CountryFlags yes
FlagDir flags

PageType htm*
PageType cgi

HideURL *.gif
HideURL *.GIF
HideURL *.jpg
HideURL *.JPG
HideURL *.png
HideURL *.PNG
HideURL *.ra


* 이전의 설정과 동일함으로 설명은 생략 하겠습니다.
* 로그 파일과 경로를 사용하는 환경에 맞추어서 변경하여 사용하시면 됩니다.





인증 설정

위에서 설정을 완료 하였다면 이제 weblog 사이트에 ID/PW 인증을 생성 합니다.
계정명은 admin 으로 진행 하겠습니다.


apache 용 인증 생성
[root]# mkdir -p /websource/weblog-aaa.com
[root]# htpasswd -c /websource/weblog-aaa.com/.htpasswd admin
New password: 패스워드입력
Re-type new password: 패스워드입력
Adding password for user admin




nginx 용 인증 생성
nginx 에서 apache 와 같이 id/pw 인증을 하려면 apache 의 htpasswd 를 이용 해야 합니다.
htpasswd 는 httpd-tools 이나 apache2-utils 를 설치하면 됩니다.

htpasswd 필요시 아래와 같이 설치하면 됩니다.
[root]# yum install httpd-tools


[root]# mkdir -p /websource/weblog-bbb.com
[root]# htpasswd -c /websource/weblog-bbb.com/.htpasswd admin
New password: 패스워드입력
Re-type new password: 패스워드입력
Adding password for user admin






국가 코드별 국기 다운로드
국가 코드앞에 국기를 표시하려면 국기 이미지를 다운로드 받고 옵션에서 FlagDir flags 으로 추가를 해주면 됩니다.

다운로드 받은 이미지를 웹 로그가 저장되는 디렉토리에 flags 라는 디렉토리에 넣으면 됩니다

국가 이미지는 http://flags.blogpotato.de 다운이 가능했지만 포스팅 하는 시점에서는 다운로드가 불가능 하여 사용중이던 파일을 대신 업로드 해드립니다

아래 wget 주소로 받으시면 됩니다.


파일 다운로드 및 압축 해제
[root]# cd /websource/weblog-aaa.com
[root]# wget https://hoing.io/hoing_flags.zip
[root]# unzip hoing_flags.zip -d .

[root]# cd /websource/weblog-bbb.com
[root]# wget https://hoing.io/hoing_flags.zip
[root]# unzip hoing_flags.zip -d .





Apache Custom Log 수정

로그 포맷을 아래와 같이 common 에서 combined 으로 수정 합니다.

수정 대상 파일은 Apache를 사용하는 환경에 따라 아래와 같이 기본 설정파일에서 수정하거나 virtualhost 를 사용한다면 virtualhost 블럭에서 수정 하면 됩니다.

/etc/httpd/conf.d/vhost.conf
/etc/httpd/conf/httpd.conf


CustomLog "logs/access.log" common

to

CustomLog "logs/access.log" combined






Apache 의 Virtualhost 추가


[root]# vi /etc/httpd/conf.d/vhost.conf

<VirtualHost *:80>
DocumentRoot "/websource/weblog-aaa.com"
ServerName weblog.aaa.com
ErrorLog "logs/weblog.aaa.com-error_log"
CustomLog "logs/weblog.aaa.com-access_log" geoip
AddDefaultCharset EUC-KR

<Directory "/websource/weblog-aaa.com">
AllowOverride ALL
Options FollowSymLinks MultiViews
DirectoryIndex index.html index.htm index.php

AuthName "Weblog Admin Page"
AuthType Basic
AuthUserFile /websource/weblog-aaa.com/.htpasswd
require valid-user

<RequireAll>
Require all denied
</RequireAll>
</Directory>
</VirtualHost>

도메인이 여러개라면 도메인별로 virtualhost 를 설정하거나 서브 도메인을 하나 더 생성하여 virtualhost 를 설정하여 접속하면 됩니다.

Virtualhost 에 대한 내용은 아래 포스팅을 참조하시면 됩니다.



만약 도메인이 없고 IP로 접속해야 한다면 Webalizer의 OutputDir를 웹서버 기본 디렉토리로 설정 하면 됩니다.

OutputDir /var/www/html





Nginx 에서 ServerBlock 추가

기본 생성되어 있는 default.conf 파일을 이용하겠습니다.

[root]# cd /etc/nginx/conf.d
[root]# vi default.conf


server {
listen 80;
server_name weblog.bbb.com;
root /websource/weblog-bbb.com;
index index.html index.htm index.php;
charset euc-kr;

access_log /var/log/nginx/weblog.bbb.com.access.log main;
error_log /var/log/nginx/weblog.bbb.com.error.log;

auth_basic "Weblog Admin Page";
auth_basic_user_file /websource/weblog-bbb.com/.htpasswd;

location / {
try_files $uri $uri/ =404;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ /\.ht {
deny all;
}
}



[참고] Nginx Server Block 에 대한 추가 정보는 아래 포스팅 참조하시면 됩니다.








Apache 및 Nginx 재시작


[root]# systemctl restart httpd

[root]# systemctl restart nginx








webalizer 실행

[root]# /usr/local/webalizer/bin/webalizer -c /usr/local/webalizer/etc/aaa.com.conf

[root]# /usr/local/webalizer/bin/webalizer -c /usr/local/webalizer/etc/bbb.com.conf








Selinux 활성화 되어 있을 경우 권한을 추가

# 권한 확인 및 추가
[root]# ls -aZ /websource
[root]# chcon -R -t httpd_sys_rw_content_t /websource

[root]# ls -aZ /websource










생성된 Webalizer 분석 페이지 확인

사이트에 접속하면 처음 아래와 같이 ID/PW 입력을 해야 합니다.
위에서 생성한 패스워드를 입력 합니다(ID는 admin 으로 생성함)











접속 하면 처음 페이지에는 아래와 같이 년월 기준으로 분리가 되어있어서 원하는 년월 을 클릭하여 상세정보를 확인하면 됩니다.











아래 접속 국가 정보를 보면 위에서 국기 이미지를 넣어주었기 때문에 아래와 같이 국가 정보와 해당하는 국기 이미지도 같이 보이게 됩니다.











crontab에 등록



access 로그를 주기적으로 읽어서 분석 할 수 있도록 crontab 을 이용하여 주기적으로 수행 하도록 설정 하겠습니다.


보통 5분 정도로 설정을 하게됩니다.



[root]# crontab -e

## webalizer update
*/5 * * * * /usr/local/webalizer/bin/webalizer -c /usr/local/webalizer/etc/aaa.com.conf > /dev/null 2>&1

  ==> 입력시 한줄로 입력 합니다.



연관된 글

 

 

 

답글 남기기