このハウツーの著者: Brian
Clifton ( Karel
Kerezman に感謝する )
version 1.0, 2000年6月29日
Analog は、世界で最も人気のある Web のログファイル解析ソフトであると言われている (詳細を参照)。 複数個の仮想ホストあるいは1個の元になるウェブサーバを走らせるときに、Analog を走らせて、ちょうど解析されたログファイルと Analog のレポートファイルを順に回転させていくことは、非常に役に立つ。それと同時に、ログファイルは圧縮され、Analog のレポートはあなたにあるいは仮想ホストのクライアント向けに電子メールで送信することができる。これらのことは、crontab と logrotate を使えば、非常に簡単に実現できる。
この例は、Apache v1.3.9-8 と Analog v4.11 を用いて、RedHat 6.1 の初期インストールを使って、開発と試験がなされました。同じことは、他の方法でもできます。
各週 (または、どんな期間でも) :
こうすると以下のようなファイルが生成される:
この方法を使うと、ファイル combined_log.html は意味がなく、作成されたとたんに、ローテーションされる。この例では、Apache は、例えば httpd.conf に記述されているように、'combined' (共通)ログ形式を採用している。
# 以下のディレクティブは、CustomLog ディレクティブを使って、ある書式に別称を定義している
# ( 以下を参照 ) 。
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined<VirtualHost www.adomain.tld>
...
...
CustomLog /home/httpd/path_to_home_dir/logs_dir/name_of_log_file combined
</VirtualHost>
システムの crontab は、どのジョブがスケジュール管理を必要としているかを常時監視している。スケジュール管理は、etc/crontab ファイルで設定される。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 列の題名 - Toby に感謝する
# 分, 時, 日, 月, 曜日, コマンド
# run-parts
# 分 時 日 月 曜日 Owner Command File
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
どのジョブが起動すべきかは、例えば、/etc/cron.weekly 中に書かれている。上記の例で言えば、/etc/cron.weekly ディレクトリは、毎日曜日の朝4時22分に確認されている。
私の /etc/cron.weekly ディレクトリは以下を含んでいる:
logrotate
makewhatis.cron
slocate.cron
tmpwatch
ここで重要なファイルは logrotate である:
#!/bin/sh
#apache のログローテーションのため bc により 23/5/00 に追加
/usr/bin/analog -G +g/home/httpd/path_to analogue_cfg file/vdomain.cfg
/usr/sbin/logrotate /etc/logrotate.conf
3行目が、仮想ホストに対して Analog を走らせる。最後の行がローテーションを行う。logrotate.conf は以下を含む:
# 詳細は "man logrotate" を参照
# ログファイルを週毎にローテーション
weekly
# バックログとして4週間保持する
rotate 4
# root にエラーを送信する
errors your@emailaddress
# 古いログをローテーションした後(空の)新ログファイルを作成
create
# もしログファイルを圧縮したいときは、以下の#を取り除く
#compress
# RPM パッケージがログローテーション情報をこのディレクトリに保存
include /etc/logrotate.d
# lastlog 又は wtmp はどのパッケージにも属さない -- それらをローテーションする
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/lastlog {
monthly
rotate 1
}
# システムに特有のログをここで設定する
# BC により 22/5/00 に追加
# ログファイルのローテーション:
/home/httpd/company-domains.net/logs/combined_log {
ifempty
copytruncate
rotate 4
weekly
mailfirst
# メール転送 your@emailaddress
errors your@emailaddress
compress
postrotate
/usr/bin/killall -HUP httpd
endscript
}
# Analog ファイルのローテーション:
/home/httpd/company-domains.net/logs/combined_log.html {
ifempty
copytruncate
rotate 4
weekly
mailfirst
mail your@emailaddress
errors your@emailaddress
nocompress
}
このファイルの最初の部分(# BC により 22/5/00 に追加)は、初期値を設定する。私のコメント以下は、パラメータが初期値を上書きするに注意してください。初期値に対し、一つ注意がある:
# root にエラーを配信
errors your@emailaddress
これは、etc/crontab が MAILTO=root を含んでいるときには、働かない。この部分は、logrotate.confに設定されたものを上書きするからです。
ローテーション/圧縮/メール転送の実行部分は、次のコメント文以下に続いて書かれている:
# システムに特有のログをここで設定する
# BC により 22/5/00 に追加
どんなオプションが有効か知るためには、詳細を man logrotate で見て下さい。もう一つの注意は、man ファイルは、コマンドの 順番 は重要ではないことを示している、ように見えることである。例えば (RedHat 6.1) /var/log/news/* に対する:
nocompress
は、endscript の後に現れる。しかし、このこれを compress に変更すると、働か なく なる。このコマンドは、postrotate よりも上に来ないといけない。