web サーバログ解析

気が向いたので,web サーバのログ解析プログラムをマシンに仕込んでみました. とりあえずは,その試行錯誤の記録.

プログラム

プログラムは analogwebalizer の2つを使ってみました.

analog

webalizer

webalizer 編

インストール

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 編

ソースの入手・コンパイル・インストール

analog は Vine 本体にも VinePlus にも収録されていないようなので,日本 Analog ユーザ会のページより SRPM ファイルを get. これを rebuild,インストール. これは何の問題もなくスカッと通る.

起動 -- やはり逆引きが…

で,web 経由で起動してみる. 最初のページのフォームでレポートの項目を設定し,レポートを作成・表示する CGI を起動する形となっている.

が,こいつも DNS 逆引きをやってくれない. というわけで,こいつも /etc/analog.cfg ファイルをいじって DNS 逆引きを有効にしてみる. が,やはりだめ.

analog の場合は,コマンドライン経由で起動し,プレーンテキストでレポートを表示することもできる. というわけで,コマンドラインから実行. すると,こちらはめでたく逆引きは行ってくれている. ということは…

CGI スクリプトの anlgform.pl を眺めてみる. すると,analog を呼び出すところで,オプションで設定ファイルの内容をオーバライドしている箇所を発見. CGI 呼び出しでは DNS 逆引きは無効になるようになっていたのでした. で,ここを潰してやると…今度はめでたく逆引きしてくれるようになりました.

出力設定画面の削除

analog の出力項目には,アクセス元のホスト名がモロに現れている部分がある. 外に晒す内容としては,これはちとまずいので,この項目は表示しないようにしたい. が,入力フォームで統計項目を設定しているのでは,ホスト名をブロックすることができない.

というわけで

  1. web アクセス専用の設定ファイルを用意
  2. シェルラッパーで直接 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 ファイルを消してしまってもいいのですが.

というわけで,表示項目の制限には成功.

webalizer の逆襲

analog では,CGI アクセスのその場でレポートを作成できるのに webalizer では数分かかってしまう. まぁ,(デフォルトの設定では)日に1回の動作なのでこの程度は許容範囲ではあるのだが,analog の軽快な動作を見てしまうとやはりくやしい.

というわけで,webalizer に,analog の dnscache ファイルをカンニングするようにさせてみる. 幸いにして,analog の dnscache の形式はプレーンテキストで,こんな感じ.

17518804 123.45.67.89 foo.bar.rog
17518804 98.76.54.32 *
dnscache ファイルの形式は analog のドキュメントにも説明があるので,詳しくはそちらを参照のこと.

で,webalizer のほうは,逆引きは perl のラッパー側で行っていたので,このスクリプトをいじれば目的は達成できるのである. うーむ,安易.

というわけでスクリプトを作成. 今まで数分かかっていたレポート作成が数秒で完了するようになりました.

そして現状

こんな感じです.


Linux のお部屋のもくじ
いまいくんのページのもくじ
2003 年 4 月 25 日更新
imai@jr0bak.homelinux.net