Apacheのログ編集

 折角、自宅サーバーを運用しているのであるから、運用状況の把握もしたく、Webのログ編集ソフトを追加した。
 どのようなソフトがあるのか知識がなかったので、インターネットで1日がかりで検索してみたのであるが、結局辿り着いたのは、webalizerという ソフトで、turbolinuxに収録されているものであった。

 turbolionuxにパッケージ化されて収録されていれば、インストールは簡単である。turbolinuxのftpサイトから webalizer-1.30.04-1.i386.rpmをダウンロードしてきてこれをrpmでインストールするだけである。

#rpm -ivh webalizer-1.30.04-1.i386.rpm

 インストール後の設定は、/etc/webalizer.confをviで開いて次の項目を環境に合わせて設定する。

LogFile    /var/log/httpd/access_log
OutputDir   /home/httpd/html/webalizer
HistoryName  /home/httpd/html/webalizer/webalizer.hist
HostName    anabuki.dip.jp

 設定できる項目には、これ以外に集計から除外するアクセスとか、項目など色々あるようである。
 次に今回新たに使用することとなるディレクトリーとファイルを作成しておく。どうもこれがないと実行時エラーになるようである。

#mkdir /home/httpd/html/webalizer
#touch /home/httpd/html/webalizer/webalizer.hist

 これでwebalizerを実行すると、指定したディレクトリー/home/httpd/html/webalizer/以下に集約データが生成され る。

 テスト時に作成したデータを、ここに示すが、これではアクセスしてきた人のURLがIPアドレ スとなっている。これではわかりにくいので、通常のURLにする方法はないか再度インターネットを検索したところ、 最近のバージョンである2.01ではDNSを使った置換機能が組み込まれていることを発見する。

 しかし、ソースからコンパイルしなければいけないようだし、設定も英語のものしか無く分かりづらかったので、別の方法として、apacheのログ自体を URLとする方法を採用した。

 ただしこのままだと1アクセスに対して2行表示されてしまうため、
 apacheの設定ファイルである/etc/httpd/conf/httpd.confの中の HostnameLookups On と変更する。
 少し上の行にあるCustomLog..................common行をコメントアウトしておく必要がある。
 また、経由先のリストを取るためCustomLog........conbinedの行のコメントマーク#を削除。
 これでlog自体がIPアドレスからURLとなった。

http://homepage1.nifty.com/Que/plamo/apache/webalizer.html">Webalizer メモ  次にログを継続して収集するには、webalizerを定期的に実行する必要があるため、以下の通り、毎日実行する項目を指定する /etc/corn.daily/に起動スクリプトを入れておく。

/etc/cron.daily/webalizer.sh
**********************
#!/bin/sh
/usr/bin/webalizer

 これで完了である。だだし、ここでよくやる失敗ではあるが、出来たファイルを実行属性にすることをお忘れなく。
 以上の設定で問題が発生した。それは、access_logが一週間単位にaccess_log.1となる時刻とwebalizerがlogを 取るタイミングの問題で、webalizerを上の設定のようにcron.weeklyに起動ファイルを入れたのでは、日曜日の早朝4時2分頃に起動する のであるが、logファイルの更新はそれより少し前の3時30〜55分頃に実施しているようであり、結果として、webalizerがlogを取りに行っ たときにはlogファイルが空になっている。 つまり土曜日1日分のlogが集計からはずれてしまっていることに気が付いた。

 対応を考えた結果、webalizerのconfファイルの設定も調べてみたが旨くいかなかったので、webalizerの起動を cron.weeklyでは無く、本体のcrontabとして日曜日の午前3時30分に起動するよう次の行を追加した。

30 3 * * * /usr/bin/webalizer

 しかし追加の方法がまずかったのか旨く動かない。しかたなく土曜日から日曜日にかけては1時間おきの処理に入れて逃げている。近々再チャレンジの予定。
現在の設定
処理の時間を深夜の24時に変更するよう、以下の処理に変更した。これでログファイルを毎日作成するようになり、動作が安定したようである。
ただし、まだ完璧でない点として、標準のweeklyのログ処理が残っており、週処理が動く日については0時から4時までのデーターが access_log.1 などのファイルに逃げてしまうようである。
標準のログ回転処理からapacheのログをのければ完璧であるが、方法を発見できていない。

crontab
-----------------------------------
0 0 * * * /etc/httpd/conf/logrotate.sh

/etc/httpd/conf/logrotate.sh
-----------------------------------
!/bin/sh
LOGFILE=/var/log/httpd/access_log
PIDFILE=/var/run/httpd.pid

WEBALIZER=/usr/bin/webalizer

R=`date --date 'yesterday' +%Y%m%d`
P=`cat $PIDFILE`

mv $LOGFILE $LOGFILE.$R
kill -s SIGHUP $P

chmod 444 $LOGFILE.$R

$WEBALIZER $LOGFILE.$R


前のページ