[Home] [Kuri] [Blog] [Sysad] [Download] [Flash] [Profile] [Antena]

wwwstat に referer の解析を追加する

突然ですが、私は、自サイトの WWW のログ解析に、 wwwstat を使用しています。
HTML を吐いてくださいますが、lynxw3m を用いてテキストに変換すれば、勝手に報告メールなどできますので、 便利です。(どれも便利ですね。)
でも、referer を解析してくれません。 どういうところからたどられているのか、気になりましたので、ふと、 勝手に付け加えてみました。

ベースにしたのは、FreeBSD のパッケージ(wwwstat-2.1)です。
Perl script でできていますので、改竄はわりと簡単です。
前提条件として、アクセスログの形式は、通常の形式のあとに referer が続くものとします。 Apache の設定でいうところの combined を使用していれば、問題ありません。 combined でなくても、common の並びの直後に referer があれば、問題ないはずです。

パッチはここにあります。→ これ

一応パッチの説明をします。
追加すべき変数は、 処理すべきかどうか(オプションで指定されたかどうか)を記録するためのもの、 出力する HTML のサブタイトルを格納するもの、 -top を指定されたときの値を格納するもの、 -sort を指定されたときの値を格納するもの、 referer のリクエスト数とバイト数を格納するもの、 になります。
それぞれ、$Do_Refer, $ReferHeader, $TopRefer, $SortRefer, %ReferRequests, %ReferBytes としました。
あとは、初期化の処理と、 オプションを指定されたときに上記変数を操作する処理、 ログの解析の際に %ReferRequests と %ReferBytes を更新する処理、 出力する処理、を追加すれば、出来上がりです。
初期化は、init_defaults および init_summary サブルーチンで行っています。 他の変数と同様に初期化をするだけでした。
オプションの処理は、get_commandline サブルーチンで行っています。 ややややこしいですが、結局は他の処理を真似ただけでいけました。
ログの解析は、process_log サブルーチンで行っています。 common なログしか見ていませんので、referer も見るようにしました。
出力には、出力用の output_refer サブルーチンと、 ソートする際に比較をするための refercompare サブルーチンを追加しました。 これらは、他の処理とほぼ同じです。 コピーペーストして変数名を変更する程度で済みました。

ソースコードがわかりやすく、簡単に追加できるようになっていますので、 意外と簡単に追加できてしまいました。
他にもいろいろな改竄ができそうです。 ユーザエージェントの集計なんかも、やってみたくなったらやってみようかと思います。