2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

FreeBSDのログローテーション!

Linuxでの ログローテーション は、logrotate.confの設定と/etc/logrotate.dの中にあるスクリプトファイルで ログを分割整理していた。しかし、FreeBSDのそれとはかなり方法が違う。 FreeBSDの場合は、newsyslogと言うモジュールを使う。newsyslogは九龍(cron)(笑)で動いている。 九龍では、時間毎に実行されてそのときに、newsyslog.confをチェックしてその中の情報を参照してログ分割作業を行う。このようなプロセスでのnewsyslogであるが、ここではnewsyslog.confの書き方等を説明してみたい。


1.newsyslogの動き

newsyslogの動きとしてはログのバックアップを繰り返し取っていき、指定された個数を越えたバックアップは 消去する。さらに、このバックアップはgz圧縮やbz圧縮することが出来る。バックアップのタイミングは、

■ 前回のバックアップから目的の時間を経過した場合
■ 目的の時間(定時刻)になった場合
■ 指定サイズを超過した場合 以上の3つから選ぶことが出来る。


2.newsyslog.confの説明

# cd /etc

# vi newsyslog.conf

# configuration file for newsyslog
# $FreeBSD: src/etc/newsyslog.conf,v 1.42 2002/09/21 12:07:35 markm Exp $
#
# Note: some sites will want to select more restrictive protections than the
# defaults. In particular, it may be desirable to switch many of the 644
# entries to 640 or 600. For example, some sites will consider the
# contents of maillog, messages, and lpd-errs to be confidential. In the
# future, these defaults may change to more conservative ones.
#

# logfilename[owner:group]modecountsizewhen[ZJB][/pid_file][sig_num]
/var/log/cron 6003100*J  
/var/log/amd.log 6447100*J  
/var/log/kerberos.log 6007100*J  
/var/log/lpd-errs 6447100*J  
/var/log/xferlog 6007100*J  
/var/log/maillog 6407*@T00J  
/var/log/sendmail.st 64010*168B  
/var/log/messages 6445100*J  
/var/log/all.log 6007*@T00J  
/var/log/slip.logroot:network6403100*J  
/var/log/ppp.logroot:network6403100*J  
/var/log/security 60010100*J  
/var/log/wtmp 6443*@01T05B  
/var/log/daily.log 6407*@T00J  
/var/log/weekly.log 64051$W6D0J  
/var/log/monthly.log 64012*$M1D0J  
/var/log/console.log 6005100*J  
/var/log/httpd-error.log 64412*$M1D0Z/var/run/httpd.pid30
/var/log/httpd-access.log 64412*$M1D0Z/var/run/httpd.pid30

1) これの意味

# logfilename[owner:group]modecountsizewhen[ZJB][/pid_file][sig_num]
/var/log/cron 6003100*J

例えば、この場合はファイルのパーミッションは600、ログが100KBを越えるとバックアップが始まる。保存するログは3つまで(cron、cron.0.bz~cron.1.bz)で、lotateのタイミングはsizeのみに依存、はじめのバックアップはまずcron.0を作りJが指定されているのでbz圧縮が行われる。そして、最終的にcron.0.bzと言うバックアップファイルが出来る。

2) 各項目の詳細

■ mode
これは、読んで字のごとくmode(パーミッション)である。

■ count
保存するバックアップファイルの数の指定である。この数を超過した場合は古い順に消去される。

■ size
ログがこのサイズを超過した場合にバックアップを取る。単位は、Kbyteである。 ここが*の場合は、sizeでのタイミングではなくなる。したがって、when側の指定が有効となる。

■ when
バックアップを取るタイミングが時間指定の場合はここに記入する。ここが*場合は、size側の設定が有効となる。
★ @ は制限付きISO8601時刻フォーマット(例:2003年10月23日)を利用すると言う意味である。ここでT00 は0時を表している。
したがって、@T00とは、毎日0時にバックアップするという意味である。ちなみに、01T00 とは、毎月1日の0時を表す。

★ $ は毎月・毎週・毎日バックップしたい場合の指定である。
フォーマットは、Dhh、Ww、WwDhh、Mdd、 MddDhhのどれかを使う。
D:毎日
W:毎週
M:毎月
hh:時間(0~23)
w:曜日(0:日曜日~6:土曜日)
dd:日(1~31)
L:月の最後の日
ちなみに$M1D0とは、毎月1日0時を表している。さらに$W6D0とは、毎週土曜日0時を表している。

■ [ZJB]
圧縮をするかしないかを表している。
Z:gz圧縮してバックアップ
J:bz圧縮してバックアップ
B:圧縮せずにそのままバックアップ
例えば、

# logfilename[owner:group]modecountsizewhen[ZJB][/pid_file][sig_num]
/var/log/cron6003100*J

この場合は、cronログが100KBを越えるとバックアップが始まる。はじめのバックアップは、まずcron.0を作りJが指定されているのでbz圧縮が行われる。
そして、最終的にcron.0.bzと言うバックアップファイルが出来る。

■ [/pid_file]
これは、バックアップを取るときにシグナルを与えなければ行けない場合は、pidファイルのバスを指定する。
例えば、

/var/log/httpd-access.log64412*$M1D0Z/var/run/httpd.pid30

な具合である。

■ [sig_num]
必要なデーモンにログファイルが変更されたことを伝えるのに SIGUSR1 というシグナルを送る必要がある。 UNIX(POSIX) の SIGUSR1 の値が 30 番なのでその値を書くことになってるらすい(ーー;)。


3.newsyslog.conf編集後の反映

newsyslog.confを編集後は必ず、newsyslogコマンドを発行すること。

# newsyslog

以上

コメント