気が向いたので,web サーバのログ解析プログラムをマシンに仕込んでみました. とりあえずは,その試行錯誤の記録.
プログラムは analog と webalizer の2つを使ってみました.
VinePlus にある吊しの RPM ファイルを apt-get install. これだけ.
とりあえず手動で動かしてみる. RPM ファイルは,レポートを cron で 1 日ごとに更新するようになっているので,
# /etc/cron.daily/webalizer.cronこれで /home/httpd/html/webalizer 以下のディレクトリにレポートが作成される.
で,めでたく統計は取れているようなのであるが,アクセス元の統計が IP アドレスのままである. また,国別統計も「不明/未定義」ばかりである. どうやら,DNS の逆引きが動いていないらしい.
というわけで,/etc/webalizer.conf ファイルをいじってみる. DNSCache 行と DNSChildren 行がコメントアウトされているので,これを有効にしてみる. すると…
警告: キーワードが間違っています 'DNSCache' (webalizer.conf) 警告: キーワードが間違っています 'DNSChildren' (webalizer.conf)設定ファイルの文法がおかしい,とかいうような感じである. ううむ.
というわけで,添付のドキュメントを読んでみると… コンパイルオプションで --enable-dns を指定しないと DNS 逆引きが有効にならないらしい.
それでは,と,今度は SRPM ファイルを get. SPEC ファイルの configure 行をいじって rebuild してみる. すると…コンパイルエラーで通らない. DB (ハッシュファイル)アクセス関数の呼び出しで引数の個数が合わん,という雰囲気. ここまでわかっていれば,あとは根性でできるのはわかっているのだが,根性なしなのでこの件は放っておくことにする.
でも,逆引き未解決なのは悲しいので,perl で適当なラッパースクリプトをでっちあげて,perl 側で逆引きをさせてみる. 今度はうまく動作. しかし,レポート作成までに数分かかるなぁ. ううむ.
で,私が webalizer で遊んでいるのを見て某嬢もサーバに webalizer を仕込みはじめた. 彼女の場合は,逆引きされた形でログを取っているらしく,DNS 逆引きの問題は起きていないようである.
しかも,webalizer だけでなく,analog も仕込んでいるではないか. というわけで,対抗して analog も仕込んでみようと決意.
(しかし,彼女のサイトのユーザエージェントの統計を見ると,いかにも日記サイト… という感じでおもしろい(^^;;)
analog は Vine 本体にも VinePlus にも収録されていないようなので,日本 Analog ユーザ会のページより SRPM ファイルを get. これを rebuild,インストール. これは何の問題もなくスカッと通る.
で,web 経由で起動してみる. 最初のページのフォームでレポートの項目を設定し,レポートを作成・表示する CGI を起動する形となっている.
が,こいつも DNS 逆引きをやってくれない. というわけで,こいつも /etc/analog.cfg ファイルをいじって DNS 逆引きを有効にしてみる. が,やはりだめ.
analog の場合は,コマンドライン経由で起動し,プレーンテキストでレポートを表示することもできる. というわけで,コマンドラインから実行. すると,こちらはめでたく逆引きは行ってくれている. ということは…
CGI スクリプトの anlgform.pl を眺めてみる. すると,analog を呼び出すところで,オプションで設定ファイルの内容をオーバライドしている箇所を発見. CGI 呼び出しでは DNS 逆引きは無効になるようになっていたのでした. で,ここを潰してやると…今度はめでたく逆引きしてくれるようになりました.
analog の出力項目には,アクセス元のホスト名がモロに現れている部分がある. 外に晒す内容としては,これはちとまずいので,この項目は表示しないようにしたい. が,入力フォームで統計項目を設定しているのでは,ホスト名をブロックすることができない.
というわけで
シェルラッパーの内容は以下の通り.
#!/bin/sh echo Content-Type: Text/Html; charset=euc-jp echo /usr/bin/analog -G -g./analog.cfg exit 0こいつを /usr/lib/analog/web/index.cgi とする.
で,apache の設定もちょっと変更. rpm ファイルをインストールした時に /etc/httpd/conf/httpd.conf に analog の設定も追加されるのだが,ここに 1 行追加.
#---analog-config--- <Location /analog> #Order allow,deny #Allow from localhost AddHandler cgi-script .cgi AddHandler cgi-script .pl Options Indexes ExecCGI AllowOverride all DirectoryIndex index.cgi # この行追加 </Location> Alias /analog/ /usr/lib/analog/web/ #---end-of-analog-config---まぁ,index.html ファイルを消してしまってもいいのですが.
というわけで,表示項目の制限には成功.
analog では,CGI アクセスのその場でレポートを作成できるのに webalizer では数分かかってしまう. まぁ,(デフォルトの設定では)日に1回の動作なのでこの程度は許容範囲ではあるのだが,analog の軽快な動作を見てしまうとやはりくやしい.
というわけで,webalizer に,analog の dnscache ファイルをカンニングするようにさせてみる. 幸いにして,analog の dnscache の形式はプレーンテキストで,こんな感じ.
17518804 123.45.67.89 foo.bar.rog 17518804 98.76.54.32 *
で,webalizer のほうは,逆引きは perl のラッパー側で行っていたので,このスクリプトをいじれば目的は達成できるのである. うーむ,安易.
というわけでスクリプトを作成. 今まで数分かかっていたレポート作成が数秒で完了するようになりました.
こんな感じです.