AWStatsでちょっとリッチなアクセス解析 @ Mac OS X


100301-0001.png

すでにWebalizerは導入済みなのだけれど、もうちょっとリッチなアクセスログ解析システムが欲しくなった。ググってみるとそのようなシステムはいくつかある。

Analog: WWW logfile analysis
http://analog.cx/

Visitors – fast web log analyzer
http://www.hping.org/visitors/index_jp.php

Home 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.pl3」を開いて解析結果を見てみよう。

自動実行の設定

AWStatsを定期的に実行するようにCronを設定しよう4。今回は6時間毎に実行するように設定した。

$ sudo crontab -e
# AWStats
0 */6 * * * /opt/local/www/awstats/cgi-bin/awstats.pl -config=blog.delphinus.dev

これやっと終わり。お疲れ様でした。


  1. 他に、arp、arp-util、db46、sqlite3、がインストールされた。 
  2. MacPortsにおけるインストールオプションのようなもの 
  3. または、「http://localhost/awstats/awstats.pl?config=ドメイン名」など。 
  4. 自動実行せずとも、AWStatsにアクセスする度に最新の結果を出すようにするオプションもある。当然レスポンスは悪くなるが。 

コメントを残す