Kozupon.com    
 
 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]

mode count size when [ZJB] [/pid_file] [sig_num]
/var/log/cron   600 3 100 * J    
/var/log/amd.log   644 7 100 * J    

/var/log/kerberos.log

  600 7 100 * J    
/var/log/lpd-errs   644 7 100 * J    
/var/log/xferlog   600 7 100 * J    
/var/log/maillog   640 7 * @T00 J    
/var/log/sendmail.st   640 10 * 168 B    
/var/log/messages   644 5 100 * J    
/var/log/all.log   600 7 * @T00 J    
/var/log/slip.log root:network 640 3 100 * J    
/var/log/ppp.log root:network 640 3 100 * J    
/var/log/security   600 10 100 * J    
/var/log/wtmp   644 3 * @01T05 B    
/var/log/daily.log   640 7 * @T00 J    
/var/log/weekly.log   640 5 1 $W6D0 J    
/var/log/monthly.log   640 12 * $M1D0 J    
/var/log/console.log   600 5 100 * J    
/var/log/httpd-error.log   644 12 * $M1D0 Z /var/run/httpd.pid 30
/var/log/httpd-access.log   644 12 * $M1D0 Z /var/run/httpd.pid 30

1) これの意味

# logfilename [owner:group] mode count size when [ZJB] [/pid_file] [sig_num]
/var/log/cron   600 3 100 * 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] mode count size when [ZJB] [/pid_file] [sig_num]
/var/log/cron 600 3 100 * J

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

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

/var/log/httpd-access.log 644 12 * $M1D0 Z /var/run/httpd.pid 30

な具合である。

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


3.newsyslog.conf編集後の反映

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

# newsyslog

以上


 
 
 



Copyright 2005 Kozupon.com.