ログを見るとさまざまな情報を得ることが出来ますが、実際の画面での確認としてどのボタンがクリックされたなどの情報というのは中々想像がしにくいと思います。それをウェブイメージからヒートマップ(どこが熱いかを段階的に表示してくれる)を作成してくれるプログラムらしいです。
元々ヒートマップの表示自体は他サービスでも結構ありましたが、ウェブサービスだったりして動作の重さとかが問題だったりして導入を断念していた事がありました。これは自前のサーバ等で行うものなので、ある程度余裕のある方で自分で設定できる方はよいかも知れません。
PHPとjavascriptで作られているらしく、クライアント側に表示される部分にjavascriptを埋め込んでPHPで集計って形みたいです。デモンストレーションもあるので、以下サイトの右側の「Demonstration」から観る事ができます。実際の動作を見ると結構感動します。ちなみにdemoというパスワードで入れるみたいなので宜しければドゾ。
Apacheのログはテキストファイル書き出しなのでリクエストを発生するたびにログを書き込む処理をするのではなく、一定量メモリに蓄えてから書き出し処理を行う事で高速化が見込めるとの事です。ホエ~色々考えますなぁ。さっそく設定してみました。
BufferedLogs ディレクティブを使うと mod_log_config の挙動が変化して、 複数のログを書き出す際に、それぞれのリクエスト処理後毎に 書き出すのではなく、いったんメモリに蓄えてから、 まとめてディスクに書き出すようになります。
上記がApacheマニュアルの「mod_log_config」の項からの引用。実は「Apacheチューニング: ロギングを高速化する」というブログエントリーでたまたま見たものなのですが、Apacheマニュアルも漁ってみた。この機能はつまりmod_log_configというモジュールの機能を使うものでLogフォーマット等を制御している部分。
ログは基本的な機能の一つなのでほとんどの場合は最初からインストールされていますが、されていない場合は別途入れます。DSO形式でのモジュールの場合、httpd.conf等の設定ファイルに以下のような記載が追加されていれば大丈夫。
LoadModule log_config_module path/to/modules/mod_log_config.so
後は、「On/Off」で指定するBufferedLogsディレクティブを指定する。
BufferedLogs On
これでApacheを再起動すればOK。簡単です。
ただ、Apache2.0.41以降の機能であると言う事と、まだ実験中の機能との事で基幹システム等にはまだ使わない方が良いかも…っていう点をご注意を。
Apacheログ解析は基本とはいえ、めんどくさいので今まで手を付けていなかった。内容はそれほど詳しくなくてもいいので手軽のが無いかな?と探している時に見つけたVisitorsってのが早くて簡単らしいので、試してみました。
以下、CentOS4にインストールする例。
適当な場所で解凍して、makeして、使いやすい場所にコピー。
wget http://www.hping.org/visitors/visitors-0.7.tar.gz tar visitors-0.7.tar.gz cd visitors-0.7 make cp visitors /usr/bin/ cd ..
nkfも出力のhtmlを変換するために必要なのでインストールされていない場合はインストールしておく。これも上記のVisitorsと同様の流れになる。
wget http://osdn.dl.sourceforge.jp/nkf/15302/nkf205.tar.gz tar zxvf nkf205.tar.gz cd nkf205 make cp nkf /usr/bin cd ..
graphvizをインストールすると左のようなグラフィカルにURIのつながりを表示することができるので出来るならインストールしておくと楽しい。yumとかなら以下を設定する事で管理が簡単。CentOSだと「/etc/yum.repos.d/CentOS-Base.repo」を編集。
[dag] name=Dag RPM Repository for Redhat EL4 baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag gpgcheck=1 enabled=1 gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
んで、普通にyum install でインストールできる。
yum install graphviz
さて、実際の実行。Googleからの検索キーワードとかが文字化けしないようにエンコード指定を変更する必要があるらしい。
visitors -P http://example.com -A -m 100 /path/to/access_log | nkf -wm0 | \ sed ’s#\(\)#\1\n#’ > \ visitors.html visitors -P http://example.com -V /path/to/access_log > graph.dot cat graph.dot | tr =_% ^$= | nkf -wmQ | tr ^$ =_ | \ sed ’s#\(^\tnode.*\)\]#\1,fontname=”/usr/share/fonts/ja/TrueType/kochi-gothic-subst.ttf”\]#’ > \ graph2.dot dot graph2.dot -Tpng > visitors.png
実行するとこんな感じ。
やってみた感想としては、10万件程度のログで1秒!。これなら簡単に日時処理に組み込めそうな感じがします。