FreeBSDには標準でnewsyslogというログローテーションツールが入っています。ただ、このnewsyslogは、バックアップしたログファイルに日付を入れることができません。
たとえばWebサーバーのログなどでは、日付繰上げでログを保存するようになっていると、ログ解析のときにファイルの管理が面倒になることがあります。
そこで、Linux標準のlogrotateをFreeBSDでも使ってみたいと思います。
インストールはportsから簡単にできます。
# cd /usr/ports/sysutils/logrotate/
# make install
インストールしたら、設定を行います。
まず共通設定から。
# cd /usr/local/etc/
# cp logrotate.conf.sample logrotate.conf
共通設定ファイルを作ったら、編集します。
# ee logrotate.conf
以下の二箇所をコメントアウトします。
# send errors to root
#errors root
#/var/log/lastlog {
# monthly
# rotate 1
#}
次にログファイルごとの設定を行います。共通設定ファイルに「logrotate.d」ディレクトリ内のファイルをインクルードするようになっていましたので、「logrotate.d」ディレクトリを作成します。
# mkdir /usr/local/etc/logrotate.d
作成した「logratate.d」ディレクトリ内に設定ファイルを作成します。
ここではApacheのログローテーション設定を書き加えます。
# ee /usr/local/etc/logrotate.d/apache22
/var/log/httpd/*.log {
daily
rotate 365
compress
ifempty
missingok
dateext
create 0666 www www
sharedscripts
postrotate
/usr/local/etc/rc.d/apache22 graceful
endscript
}
ログファイルはワイルドカードを使用することができます。半角スペースで区切って複数のログファイルを指定することもできます。
また、上記のそれぞれの設定は以下のような意味があります。
| daily | 毎日ログローテーションを行う。毎週行うweeklyという設定もあります。 |
|---|---|
| rotate 365 | 365個のログファイルをバックアップとして保存しておきます。100個保存する場合は100と指定します。これを超える場合は古いファイルから削除されます。 |
| compress | バックアップしたログファイルを圧縮します。 |
| ifempty | ログファイルが空でもローテーション処理を実行します。 |
| missingok | ログファイルが無くてもエラーを出さないようにします。 |
| dateext | バックアップしたログファイルに年月日を付与します。 |
| create 0666 www www | ログファイルやバックアップを作成するときに、指定したパーミッション・ユーザー・グループで作成します。 |
| sharedscripts | ログローテーションを実行する前後に実行する「prerotate」「postrotate」の実行を、ログファイル一つ一つに対してではなく、このグループ内でまとめて一度だけ実行します |
| postrotate ~ endscript | ログローテーションを実行した後に実行するコマンドを指定します。ローテーション実行前にコマンドを実行する場合は「prerotate~endscript」を指定します。 |
設定が完了したら、ためしに動作させてみましょう。
以下のコマンドを実行してlogrotateを実行します。
# /usr/local/sbin/logrotate -fv /usr/local/etc/logrotate.conf
このとき、「-f」オプションが付いているので強制実行されます。すでに稼働中のシステムのときはご注意ください。
また「-v」オプションは詳細情報を表示します。問題があったときは詳細情報を参考にして設定ファイルを修正できます。
すべて問題が無いことを確認したら、cron設定に追加して定期的に実行されるようにします。
# ee /etc/crontab
以下を追加します。
0 0 * * * root /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf >/dev/null 2>&1
設定を書き換えたら、crondを再起動します。
# /etc/rc.d/cron restart
(2008/5/28追記)
logrotateの設定にログファイルを追加したとき、初回のログローテーションが実行されないことがあります。
これは、新しいログファイルの初回の実行時は、ログローテーションの日時を記録するだけで終了してしまうためです。
その、ログの日時を記録するファイルは、
/var/log/logrotate.status
にあります。このファイルにはこのように書いてあります。
logrotate state -- version 2
"/var/log/httpd/access.log" 2008-5-28
"/var/log/httpd/error.log" 2008-5-28
初回も強制的にローテーションを実行するには、前述のとおり「-f」オプションをつけて実行します。
コメントする