アクセスログ解析(Awstats)

■ FC6 / Fedora7 / Fedora8 / Fedora9
Awstats は視覚的に綺麗で、見やすいログ解析ツールです。日別・時間別・アクセス先など様々な統計情報を把握することが出来ます。
■Awstatsのインストール
以下のコマンドでAwstatsをインストールします。

[root@linux ~]# yum -y install awstats

awstatsを使うには、perlも必要です。perl -vと入力して、
以下のような情報が返ってくれば、perlはインストールされています。

[root@linux ~]# perl -v
This is perl, v5.8.8 built for i386-linux-thread-multi
Copyright 1987-2006, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

■ Awstatsの設定ファイルの編集

まず不要な設定ファイルを削除しておきます
[root@linux ~]# rm -f /etc/awstats/awstats.localhost.localdomain.conf
awstatsへ移動します。
[root@linux ~]# cd /etc/awstats
etc/awstats/のawstats.server.yokensaka.com.conf を awstats.conf に変更します。
[root@linux awstats]# mv awstats.linux.yokensaka.com.conf awstats.conf
続いて、root権限で、このawstats.confを編集します。
[root@linux awstats]# su -
[root@linux ~]# vi /etc/awstats/awstats.conf
SiteDomain="linux.yokensaka.com"
↓
SiteDomain="yokensaka.com" ←独自ドメイン名に変更
DNSLookup=2
↓
DNSLookup=1   ← 1に変更(DNSの逆引きにする設定に変更)
DirIcons="/awstatsicons"
↓
DirIcons="/icon" ← アイコンのディレクトリー名を変更
SkipHosts="127.0.0.1"
↓ 内部のクライアントはスキップするように変更
SkipHosts="127.0.0.1 REGEX[^192\.168\.1\.]"
Lang="auto"
↓
Lang="jp" ← jpに変更
#LoadPlugin="tooltips"
↓ #を削除(該当する部分にマウスを当てるとヘルプが表示されます。)
LoadPlugin="tooltips"
※ 最後にこのままだとアイコンが表示されないので、アイコンの入ってるフォルダ
/usr/share/awstats/wwwroot/icon を /var/www/html へコピーしておきます。

■ awstats.plアクセス制限(内部からのみアクセス可)

[root@linux ~]# vi /etc/httpd/conf.d/awstats.conf
最終行へ追加します
<Files "awstats.pl">
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1 ← 内部のネットワークアドレスを指定
</Files>
Apache設定反映
[root@linux ~]# /etc/rc.d/init.d/httpd reload 
httpd を再読み込み中: [ OK ]

■ httpdの設定ファイルの編集

httpdの設定ファイルの編集
[root@linux ~]# vi /etc/httpd/conf/httpd.conf
長すぎるURI(414 Error)はログに記録しない
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
         ↓
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
ログの記録内容変更
# logged therein and *not* in this file.
#
#CustomLog logs/access_log common
この下に以下を追加
SetEnvIf Request_URI "default\.ida" no_log
SetEnvIf Request_URI "cmd\.exe" no_log
SetEnvIf Request_URI "root\.exe" no_log
SetEnvIf Request_URI "Admin\.dll" no_log
SetEnvIf Request_URI "NULL\.IDA" no_log
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(css)$" no_log
SetEnvIf Remote_Addr 192.168. no_log
CustomLog logs/access_log combined env=!no_log
以上で設定は完了ですので、一度httpdを再起動させます。
[root@linux ~]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

■ ログファイルからデータファイルの作成

続いて、ログファイルからデータファイルの作成をします。
[root@linux ~]# /usr/share/awstats/tools/awstats_updateall.pl now
Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=default -configdir="/etc/aw    stats"' to update config default
Create/Update database for config "/etc/awstats/awstats.conf" by AWStats version 6.6 (build 1.887)
From data in log file "/var/log/httpd/access_log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 0
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=localhost.localdomain -conf    igdir="/etc/awstats"' to update config localhost.localdomain
Create/Update database for config "/etc/awstats/awstats.localhost.localdomain.conf" by AWStats versi    on 6.6 (build 1.887)
From data in log file "/var/log/httpd/access_log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 0
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.

これで、/etc/cron.hourly/awstats が一時間毎に実行されます。セットアップしてから、1時間たってから、 http://サーバーアドレス/awstats/awstats.pl にアクセスすれば、解析結果が見れるはずです. Fedora Core6 のインストールのときに SELinux を無効にしなかった場合は、awstats を利用する事ができません。 そのときは、メニューのアプリケーション→システム設定→セキュリティレベルをクリックしてSELinuxのタブの中のDisable SELinux protection for httpd daemonにチェックをいれてコンピューターを再起動してください。
■ 文字化け対策
このままでも閲覧は可能なんですが、Awstatsが出力するHTMLファイルの文字コードはデフォルトでUTF-8ですので、その他の文字コードで検索された単語などは文字化けしてしまいます。文字化けの対応としてaccess_logの検索文字列をUTF-8に変換してやる必要があります。私はこのUTF-8に変換してくれるスクリプトをダウンロードして、/root以下に置きました。(最新版はこちらで確認してください

[root@linux ~]# wget http://www.ganaware.jp/viewcvs.cgi/*checkout*/conv_weblog_to_utf8/conv_weblog_to_utf8.pl?rev=1.6
警告: HTTPはワイルドカードに対応していません。
--21:00:18--  http://www.ganaware.jp/viewcvs.cgi/*checkout*/conv_weblog_to_utf8/conv_weblog_to_utf8.    pl?rev=1.6
=> `conv_weblog_to_utf8.pl?rev=1.6'
www.ganaware.jp をDNSに問いあわせています... 221.249.35.2
www.ganaware.jp|221.249.35.2|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/x-perl]
[ <=>                                                     ] 2,248         --.--K/s
21:00:18 (105.69 MB/s) - `conv_weblog_to_utf8.pl?rev=1.6' を保存しました [2248]
ファイル名の変更conv_weblog_to_utf8.pl?rev=1.6 → conv_weblog_to_utf8.pl
[root@linux ~]# mv conv_weblog_to_utf8.pl?rev=1.6 conv_weblog_to_utf8.pl

access_logの変換

スクリプトに実行権限を与えておきます。(/rootディレクトリで)
[root@linux ~]# chmod +x conv_weblog_to_utf8.pl
このスクリプトを使用して、access_logを変換します。
[root@linux ~]# ./conv_weblog_to_utf8.pl < /var/log/httpd/access_log > /var/log/httpd/access_log.utf

access_logをUTF-8に変換すると、access_log.utfというファイルが、/var/log/httpd/以下に新しく出来上がります。
awstats.confの設定変更
変換したaccess_logを読み込むようにawstats.confの設定を変更します。

[root@fedora ~]# vi /etc/awstats/awstats.conf
LogFile="/var/log/httpd/access_log"
↓
LogFile="/var/log/httpd/access_log.utf" ← 変換したaccess_logを読み込むように指定

以上で、UTF-8以外の文字コードで検索された文字列も文字化けしないようになります。
URL http://サーバーアドレス/awstats/awstats.pl を指定してアクセスしてみましょう。
■ awstatsの自動実行

自動で実行する為にcronに登録します。
[root@linux ~]# crontab -e
MAILTO=""
15 0-23/3 * * * /root/conv_weblog_to_utf8.pl < /var/log/httpd/access_log > /var/log/httpd/access_log.utf ; /usr/share/awstats/tools/awstats_updateall.pl now

毎日3時間おきの15分にaccess_logの変換をして、そのあとでデータファイルの作成をするようにしています。また、結果をメールしないように「MAILTO=””」と先頭行に書き加える。