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
前のページ