すでにWebalizerは導入済みなのだけれど、もうちょっとリッチなアクセスログ解析システムが欲しくなった。ググってみるとそのようなシステムはいくつかある。
Analog: WWW logfile analysis
http://analog.cx/Visitors – fast web log analyzer
http://www.hping.org/visitors/index_jp.phpHome of The Webalizer
http://www.mrunix.net/webalizer/AWStats – Free log file analyzer for advanced statistics (GNU GPL).
http://awstats.sourceforge.net/
参考:Google Analytics にてアクセスIPをチェック|トピックを表示
http://forum.tsukaeru.net/viewtopic.php?t=3470
いろいろある中でもPerlで書かれてて中身がわかりやすそうなAWStatsを選んだ。こいつは前に導入したWebalizerよりずっと優れていて、解析結果が細かいだけでなく、スクリプトまで書いて対処した問題に煩わされることもない。
インストール
AWStatsのインストール
MacPortsでインストールは楽ちん! と思いきや、ちょっとした落とし穴があった。
$ sudo port install awstats
このコマンドだと、依存関係からMacPorts版のApacheがインストールされてしまう1のだ。僕はMac OS X付属のApacheを使っているのでそれでは具合が悪い。一度アンインストールしてちょっと細工することにした。
$ sudo port uninstall awstats $ sudo port uninstall apache2
次のようにして、AWStatsのインストール定義ファイルを書き換える。
$ sudo vim /opt/local/var/macports/sources/rsync.macports.org/release/ports/www/awstats/Portfile
*** Portfile.orig 2010-03-01 11:43:10.000000000 +0900 --- Portfile 2010-03-01 12:11:54.000000000 +0900 *************** *** 38,43 **** --- 38,46 ---- depends_lib-append port:apache depends_lib-delete port:apache2 } + variant no_apache2 description "no apache2" { + depends_lib-delete port:apache2 + } use_configure no build {}
これで「no_apache2
」というVariants2が使用可能になる。この状態で再度インストールした。
$ sudo port install awstats +no_apache2 ---> Computing dependencies for awstats ---> Fetching awstats ~省略~ ---> Activating awstats @6.9_1+no_apache2 ---> Cleaning awstats
必要モジュールのインストール
後で必要になるモジュール「Geo::IP
」をインストールしておこう。このモジュールはlibgeoip
と言うライブラリに依存している。
$ sudo port install libgeoip $ sudo cpan -i Geo::IP
設定
アクセスログ形式を変更する
まずはApacheの設定をしよう。AWStatsはApacheのCombinedログに対応している。httpd.conf
などを開いてCustomLog
オプションを書き換える。
# アクセスログの種類をcommonからcombinedに変更する # CustomLog "/private/var/log/apache2/access_log" common CustomLog "/private/var/log/apache2/access_log" combined
この設定はApacheを再起動すると有効になるのだが、厄介なことにCommonログとCombinedログが混じった状態ではAWStatsが正常に動かない。よって、再起動する前に今までのログをリネームして別ファイルになるようにしておく。
$ sudo /usr/sbin/apachectl stop $ cd /var/log/apache2 $ sudo mv access_log access_log.orig
AWStatsを参照できるようにする
AWStats自身はCGIで動く。Apacheの設定ファイルを作ろう。
$ sudo vim /etc/apache/other/awstats.conf
Alias /awstatsclasses "/opt/local/www/awstats/classes/" Alias /awstatscss "/opt/local/www/awstats/css/" Alias /awstatsicons "/opt/local/www/awstats/icon/" ScriptAlias /awstats/ "/opt/local/www/awstats/cgi-bin/" <Directory "/opt/local/www/awstats/"> Options None AllowOverride None Order deny,allow Deny from all Allow from localhost </Directory>
例ではlocalhost
以外からのアクセスを禁止している。パスなどは環境によって異なるだろう。
設定が終わったらApacheを(再)起動させる。
$ sudo /usr/sbin/apachectl start
AWStatsの設定ファイルを書く
設定ファイルのサンプルはファイル名が「awstats.**model**.conf
」となっている。これを「awstats.**解析したいサーバのドメイン名**.conf
」にコピーした上で編集する。
$ cd /opt/local/etc/awstats $ sudo cp awstats.model.conf awstats.blog.delphinus.dev.conf $ sudo vim awstats.blog.delphinus.dev.conf
ファイルの中に詳細な解説があるのであまり迷うことはないだろう。デフォルトに代えて次の設定をした。
LogFile="/var/log/apache2/access_log" SiteDomain="blog.delphinus.dev" HostAliases="blog.delphinus.dev" DNSLookup=1 DirData="/opt/local/var/lib/awstats" DirCgi="/awstats/cgi-bin" DirIcons="/awstatsicons" AllowFullYearView=3 AllowAccessFromWebToFollowingIPAddresses="0:0:0:0:0:0:0:1" SkipHosts="127.0.0.1 localhost REGEX[^192\.168\.] ::1" LoadPlugin="geoip GEOIP_STANDARD /opt/local/share/GeoIP/GeoIP.dat"
- 5行目は解析結果を出力するディレクトリ。初期設定の「
.
」だとAWStatsの実行ファイルと同じ「/opt/local/www/awstats/cgi-bin/
」に出力する。そのままでもいいのだが、今回は別の場所にした。 - 8行目の「
AllowFullYearView
」。解析結果の年表示は非常に重いので大規模なサイトではオフにした方がいいようだ(このサイトには関係がないが)。 - 11行目が先に書いた
Geo::IP
を利用する設定。これによってIPアドレスから所在国などを割り出せる。
実行!
やっとここまで来た。設定が終わったので、実際にレポートを作成しよう。
$ cd /opt/local/www/awstats/cgi-bin $ sudo ./awstats.pl -config=blog.delphinus.dev
しばらく待つとレポートが完成する。「http://ドメイン名/awstats/awstats.pl
3」を開いて解析結果を見てみよう。
自動実行の設定
AWStatsを定期的に実行するようにCronを設定しよう4。今回は6時間毎に実行するように設定した。
$ sudo crontab -e
# AWStats 0 */6 * * * /opt/local/www/awstats/cgi-bin/awstats.pl -config=blog.delphinus.dev
これやっと終わり。お疲れ様でした。