アクセス解析 Analog の URLデコード logkf
サーバにWebのアクセス解析を設置したときのメモ。
フリーでポピュラーなところではAnalog, AWStats, Webalizerなどがあり、AWStatsはアウトプットが綺麗とのことで少し心惹かれ、AWStats Documentation - Log File analyzer comparison なども一応参考にしたが、あえて先ずは老舗の一角Analogを設置して評価してみた。
Analog 良いです。
確かにアウトプットは今風とはいえないかもしれないけれど、速いし、カスタマイズや外部連携なども柔軟にできるので、まずは満足です。
ReportmagicというHelper Applicationと連動すればプレゼンも変えられるが、質実剛健な職人といった風情も悪くないので筆者はそのまま使っている。
設置したのは最新バージョン6.0 (といっても熟しているので2004-11-19が最新)
一応日本語にも対応している国際化版だが、混沌とした日本語環境に完全対応とはいかないようだ。
(そりゃそうだろう。日本人開発者ですら幾度か苦労するほど多くの文字セットが混在するんだから)
日本語環境で使用するには、例えば文字セットをUTF-8で統一する場合、設定ファイル (analog.cfg) などで、
LANGUAGE JAPANESE-UTF → 出力の文字セット LANGFILE /usr/local/bin/analog/lang/jpu.lng → 基本文言の和訳ファイル DOMAINSFILE /usr/local/bin/analog/lang/jpudom.tab → ドメイン(TLD)の和訳ファイル DESCFILE /usr/local/bin/analog/lang/jpudesc.txt → レポート説明文の和訳ファイル
・・・などの言語環境の指定をして、
さらに"検索語レポート"、"検索語句レポート"で文字化けしないように
SEARCHCHARCONVERT ON
を指定すると、一応それなりに検索語は変換してくれる。
一応と言ったのは一部文字化けするからで、これについては後日analog全般のインストール・設定についてまとめて記述する機会があればと思っているが (予定は未定)、今回はURLデコードについて、良い発見をしたので先んじてご紹介。
"参照元レポート"などには、検索エンジンから飛んできた場合など、
http://search.yahoo.co.jp/search?p=%83X%83i%83t%83L%83%93%8dD%82%ab...
http://www.google.co.jp/search?q=%83X%83i%83t%83L%83%93%8dD%82%ab...
と "スナフキン好き" が "%83X%83i%83t%83L%83%93%8dD%82%ab" とURLエンコードされてapacheによってロギングされた文字列がそのまま出力されるので、これをデコードしてやらないと(、超人以外には、少なくとも筆者や筆者の顧客の皆様には) 読めない。
で、Analogが出力してくれたxhtmlなどの出力ファイルを、デコード処理に渡して変換してやる必要があるのだが、先達によりいくつかのツールが公開されている。
- analogurldecode(旧urldecode.pl) -
- anadeco.pl Analogの解析結果に現れるURLエンコードを変換 - 徒書
- logkf-1.0beta2.tar.gz analog.cx - このウェブサイトは販売用です! - analog リソースおよび情報
筆者は適材適所使用しているのだが、今回はその中でlogkfについて。
logkfは、Analogの出力形式をASCII形式に指定した出力ファイルもうまく変換してくれた。
例えばcronから起動して日次レポートをASCII形式で生成してadminにmailしたい場合など有用。
logkfは上記の日本Analogユーザ会でHelper Applicationとして紹介されているが、現在は (作者さんのHPが閉じていて) 落とせないので転載してくれているAnalog によるアクセスログ解析さんから取得。
ただし最終バージョンにもまだ少し不具合が残ったままのようだ。
筆者の場合、cronから呼び出したSHスクリプトから、
logkf -8 [入力ファイルパス] > [出力ファイルパス]
とするとうまく動いたが、
/usr/local/bin/logkf -8 [入力ファイルパス] > [出力ファイルパス]
とすると
logkf: Cannot open file "/usr/local/bin/[入力ファイルパス]"
みたいな入力ファイルのオープンエラーが発生した。
(どうやらパラメータをチェック、補完したりしている辺りのコードが悪戯をしているようだ。)
筆者はSHスクリプトからのコマンド呼び出しは明示的にフルパスで指定する流儀にしているので、logkfのソースを修正しようかと思っていたところすでにパッチを作ってくれている先達がいたので感謝と紹介。
上記パッチを当てるとうまく動きました。ありがとう!