バーチャルホスト用アクセスログ解析(AWStats)

最終更新日: 2014.02.19

<<トップページ <<新着情報 <<サイト内検索 <<CentOSで自宅サーバー構築 <<Scientific Linuxで自宅サーバー構築

■概要

AWStatsを利用してバーチャルホストのアクセスログを解析し、バーチャルホスト用へのアクセス統計をWebブラウザから参照できるようにする。
なお、ここでの環境条件は以下のとおりとする。

・バーチャルホスト名:virtual.com
・バーチャルホストアクセスログ:/var/log/httpd/virtual.com-access_log
・バーチャルホストドキュメントルート:/var/www/html/virtual.com/
・バーチャルホストアクセス解析結果出力先:/var/www/html/virtual.com/awstatsreport

バーチャルホストAWStats導入済であること


■AWStats設定

[root@fedora ~]# cp /etc/awstats/awstats.model.conf /etc/awstats/awstats.virtual.com.conf
 ← 設定ファイルをサンプルよりコピー

[root@fedora ~]# vi /etc/awstats/awstats.virtual.com.conf ← 設定ファイル編集
# "LogFile" contains the web, ftp or mail server log file to analyze.
# Possible values: A full path, or a relative path from awstats.pl directory.
# Example: "/var/log/apache/access.log"
# Example: "../logs/mycombinedlog.log"
# You can also use tags in this filename if you need a dynamic file name
# depending on date or time (Replacement is made by AWStats at the beginning
# of its execution). This is available tags :
#   %YYYY-n  is replaced with 4 digits year we were n hours ago
#   %YY-n    is replaced with 2 digits year we were n hours ago
#   %MM-n    is replaced with 2 digits month we were n hours ago
#   %MO-n    is replaced with 3 letters month we were n hours ago
#   %DD-n    is replaced with day we were n hours ago
#   %HH-n    is replaced with hour we were n hours ago
#   %NS-n    is replaced with number of seconds at 00:00 since 1970
#   %WM-n    is replaced with the week number in month (1-5)
#   %Wm-n    is replaced with the week number in month (0-4)
#   %WY-n    is replaced with the week number in year (01-52)
#   %Wy-n    is replaced with the week number in year (00-51)
#   %DW-n    is replaced with the day number in week (1-7, 1=sunday)
#                              use n=24 if you need (1-7, 1=monday)
#   %Dw-n    is replaced with the day number in week (0-6, 0=sunday)
#                              use n=24 if you need (0-6, 0=monday)
#   Use 0 for n if you need current year, month, day, hour...
# Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log"
# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log"
# You can also use a pipe if log file come from a pipe :
# Example: "gzip -d </var/log/apache/access.log.gz |"
# If there is several log files from load balancing servers :
# Example: "/pathtotools/logresolvemerge.pl *.log |"
#
LogFile="/var/log/httpd/access_log"
↓
LogFile="/var/log/httpd/virtual.com-access_log" ← バーチャルホストアクセスログを指定

# "SiteDomain" must contain the main domain name, or the main intranet web
# server name, used to reach the web site.
# If you share the same log file for several virtual web servers, this
# parameter is used to tell AWStats to filter record that contains records for
# this virtual host name only (So check that this virtual hostname can be
# found in your log file and use a personalized log format that include the
# %virtualname tag).
# But for multi hosting a better solution is to have one log file for each
# virtual web server. In this case, this parameter is only used to generate
# full URL's links when ShowLinksOnUrl option is set to 1.
# If analysing mail log, enter here the domain name of mail server.
# Example: "myintranetserver"
# Example: "www.domain.com"
# Example: "ftp.domain.com"
# Example: "domain.com"
#
SiteDomain="localhost.localdomain"
↓
SiteDomain="virtual.com" ← Webサーバー名を指定

# If you want to have hosts reported by name instead of ip address, AWStats
# need to make reverse DNS lookups (if not already done in your log file).
# With DNSLookup to 0, all hosts will be reported by their IP addresses and
# not by the full hostname of visitors (except if names are already available
# in log file).
# If you want/need to set DNSLookup to 1, don't forget that this will reduce
# dramatically AWStats update process speed. Do not use on large web sites.
# Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6).
# Note: Result of DNS Lookup can be used to build the Country report. However
# it is highly recommanded to enable the plugin 'geoipfree' or 'geoip' to
# have an accurate Country report with no need of DNS Lookup.
# Possible values:
# 0 - No DNS Lookup
# 1 - DNS Lookup is fully enabled
# 2 - DNS Lookup is made only from static DNS cache file (if it exists)
# Default: 2
#
DNSLookup=2
↓
DNSLookup=1 ← アクセス元の名前解決を行う(アクセス元をIPアドレスではなくホスト名で表示する)

# Show authenticated users chart
# Context: Web, Streaming, Ftp
# Default: 0, Possible column codes: PHBL
ShowAuthenticatedUsers=0
↓
ShowAuthenticatedUsers=PHBL ← 認証ユーザを表示する場合

# Plugin: GeoIPfree
# Perl modules required: Geo::IPfree version 0.2+ (from Graciliano M.P.)
# Country chart is built from an Internet IP-Country database.
# This plugin is useless for intranet only log files.
# Note: You must choose between using this plugin (need Perl Geo::IPfree
# module, database less up to date) or the GeoIP plugin (need Perl Geo::IP
# module from Maxmind, database more up to date).
# Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl
# module, so install it from elsewhere (from www.cpan.org for example).
# This plugin reduces AWStats speed of 10% !
#
#LoadPlugin="geoipfree"
↓
LoadPlugin="geoipfree" ← コメント解除(アクセス元国情報を詳細に取得)

■AWStatsデータベース作成

(1)AWStatsデータベース初期作成
Apacheのバーチャルホスト分のログファイルを過去分も含めて全てAWStatsのデータベースに取り込む
[root@fedora ~]# vi awstatsinit.sh ← AWStatsデータベース初期作成スクリプト作成
#!/bin/bash

logfile=`grep ^LogFile /etc/awstats/awstats.$1.conf|sed -e 's/LogFile="\([^ ]*\)"/\1/p' -e d`
for log in `ls $logfile*|sort -r`
do
    `rpm -ql awstats|grep "awstats\.pl"` \
    -config=$1 -update -logfile=$log
done

[root@fedora ~]# sh awstatsinit.sh virtual.com ← AWStatsデータベース初期作成スクリプト実行
※ログ量により時間がかかる
Update for config "/etc/awstats/awstats.virtual.com.conf"
With data in log file "/var/log/httpd/virtual.com-access_log.4"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 123047
 Found 1821 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 121226 new qualified records.
Update for config "/etc/awstats/awstats.virtual.com.conf"
With data in log file "/var/log/httpd/virtual.com-access_log.3"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record has fallen on another record.
So searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 130918
 Found 1700 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 129218 new qualified records.
Update for config "/etc/awstats/awstats.virtual.com.conf"
With data in log file "/var/log/httpd/virtual.com-access_log.2"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 128865
 Found 1680 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 127185 new qualified records.
Update for config "/etc/awstats/awstats.virtual.com.conf"
With data in log file "/var/log/httpd/virtual.com-access_log.1"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 115202
 Found 1532 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 113670 new qualified records.
Update for config "/etc/awstats/awstats.virtual.com.conf"
With data in log file "/var/log/httpd/virtual.com-access_log"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 21746
 Found 312 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 21434 new qualified records.

[root@fedora ~]# rm -f awstatsinit.sh ← AWStatsデータベース初期作成スクリプト削除
※以後のAWStatsデータベースの更新は/etc/cron.hourly/awstatsにより1時間おきに自動実行される

■AWStats確認

http://virtual.com/awstats/awstats.plへアクセスしてアクセス統計ページが表示されることを確認

■アクセス統計ページHTML版の作成

awstats.plは、実行するたびにAWStatsのデータベースからログ情報を入力してアクセス統計ページを作成するため、サーバーに負荷がかかることから、awstats.plは内部からのみ実行できるようにする。また、万が一、AWStatsのデータベースが失われた場合、アクセス統計が見れなくなってしまうため、アクセス統計ページをHTMLで作成するようにする。

(1)アクセス統計ページHTML版格納ディレクトリ設定
[root@fedora ~]# mkdir /var/www/html/virtual.com/awstatsreport ← HTML版格納ディレクトリ作成

[root@fedora ~]# vi /etc/httpd/conf.d/virtualhost.conf ← バーチャルホスト設定ファイル編集
<VirtualHost *:80>
    ServerName virtual.com
    DocumentRoot /var/www/html/virtual.com
    ErrorLog logs/virtual-error_log
    CustomLog logs/virtual.com-access_log combined env=!no_log
    Alias /awstatsreport /var/www/html/virtual.com/awstatsreport ← 追加
</VirtualHost>

[root@fedora ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映
httpd を再読み込み中:                                      [  OK  ]

(2)awstats.plアクセス制限
Apacheアクセスログ解析(AWStats)で既に設定済

(3)アクセス統計ページHTML版作成
※アクセス統計ページHTML版作成スクリプトはApacheアクセスログ解析(AWStats)で既に作成済
[root@fedora ~]# ./awstatsreport.sh virtual.com /var/www/html/virtual.com/awstatsreport
 ← アクセス統計ページHTML版作成スクリプト実行

(4)アクセス統計ページHTML版確認
http://virtual.com/awstatsreport/へアクセスして今月分のアクセス統計ページが表示されることを確認
過去のアクセス統計ページはhttp://virtual.com/awstatsreport/年月(YYYYMM).html(例:http://virtual.com/awstatsreport/200601.html)へアクセスする

(5)アクセス統計ページHTML版作成定期自動実行設定
[root@fedora ~]# echo "00 00 * * * root /root/awstatsreport.sh virtual.com /var/www/html/virtual.com/awstatsreport > /dev/null" >> /etc/cron.d/awstatsreport
 ← cron登録
毎日00:00にアクセス統計ページHTML版作成スクリプト実行


■関連コンテンツ




▲このページのトップへ戻る

プライバシーポリシー