Last Updated on 10월 20, 2021 by Jade(정현호)
Contents
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
연관된 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io