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

Share

Last Updated on 10월 20, 2021 by Jade(정현호)

 

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
    ==> 한글로 컴파일 합니다.


빌드(Build)

[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 설정

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


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

인증 설정

사이트 접속에 관한 주요 정보가 있기 때문에 웹 서버의 보안 기능을 이용해서 인증 설정을 하도록 하겠습니다

웹 서버에서는 인증 기능을 통해서 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 다운이 가능했지만 포스팅 하는 시점에서는 다운로드가 불가능 하여 사용중이던 파일을 대신 업로드 해드립니다

아래 주소로 받으시면 됩니다.
https://hoing.io/hoing_flags.zip


파일 다운로드 및 압축 해제

[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 에 대한 추가 정보는 아래 포스팅 참조하시면 됩니다.

            

웹서버 재시작 및 webalizer 시작

Apache 및 Nginx 재시작

-- Apache
[root]# systemctl restart httpd

-- Nginx
[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



연관된 글

 

 

 

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x