newsyslog


ログのロテート

ログをほったらかしていると、どんどんログが貯まって溢れてしまいます。その為に一定の条件で、ログのサイズや期間を決めてログをローテートするツールが開発されています。

newsyslog

FreeBSDでは、最初からインストールされています。ファイルの場所は/usr/sbin/newsyslogですが、/etc/newsyslog.confのファイルを編集して設定します。


ローテートの条件 newsyslog は cron(8) から起動します。指定した時間から1時間以内に起動されたらローテートを実行するという仕様になっています。

newsyslog.confの中身をのぞいてみると、以下の様な感じになっていると思います。
# configuration file for newsyslog
# $FreeBSD: src/etc/newsyslog.conf,v 1.25.2.8 2001/12/14 11:50:42 rwatson 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  *     Z
/var/log/amd.log                        644  7     100  *     Z
/var/log/kerberos.log                   600  7     100  *     Z
/var/log/lpd-errs                       644  7     100  *     Z
/var/log/maillog                        644  7     *    @T00  Z
/var/log/sendmail.st                    644  10    *    168   B
/var/log/messages                       644  5     100  *     Z
/var/log/all.log                        600  7     *    @T00  Z
/var/log/slip.log                       600  3     100  *     Z
/var/log/ppp.log                        600  3     100  *     Z
/var/log/security                       600  10    100  *     Z
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/daily.log                      640  7     *    @T00  Z
/var/log/weekly.log                     640  5     1    $W6D0 Z
/var/log/monthly.log                    640  12    *    $M1D0 Z
/var/log/console.log                    600  5     100  *     Z
 
■logfilename
ローテートの対象となるログファイルです。(絶対パスで記述)
■[owner:group]
ローテートしたファイルの owner と group を設定します。(多くの場合設定しない場合が多いみたい)
■mode
ログファイルとローテートしたファイルのpermissionを設定します。
■count
ローテート後に保存しておくファイルの数を指定します。(実際には3つほど多くなるみたいですが)
■size
ログファイルが指定した大きさに達したときにローテートします。キロバイト(1024バイト)単位で指定します。
■when
いつローテートするかを指定します。特定の時刻もしくは時間間隔で指定します。 いくつかの記述方法があります。
*
    この項目を設定しません。ローテートのタイミングは size のみに依存します。

時刻指定 (制限付きISO8601形式)
    @[[[[[cc]yy]mm]dd][T[hh[mm[ss]]]]]
  cc: 西暦年の上2桁 hh: 24時間制での時
  yy: 西暦年の下2桁 mm: 分
  mm: 月 dd: 日 ss: 秒
    の形式で指定します。

    newsyslog は指定した時刻の1時間以内に実行されたときにローテートしますから、
    mm(分) や ss(秒) の指定はほとんど意味がありません。例えば1日の5時を指定し
    たいときには、"@01T05" とします。この場合、指定しない項目はそのときの時刻
    の値となります。
    
日付や曜日を指定
    $[Dhh], $[Ww[Dhh]], $[Mdd[Dhh]]
  hh: 24時間制での時
  w: 曜日 (0〜6, 0が日曜日)
  dd: 日付 (1〜31, "L" もしくは "l" を指定すると月末)
    の形式で指定します。

    例えば毎週金曜の16時を指定したいときには "$W5D16" となり、毎月5日の6時ならば
     "$M5D6" となります。
    
時間間隔を指定
    単に数値を書きます。
    "168" と指定しますと 168時間毎、つまり1週間毎になります。 

■[ZJB]
ローテートしたファイルを圧縮するかどうかを指定します。指定しないときはなにもしません。
"Z"
   gzip(1) で圧縮します。

"J"
   bzip2(1) で圧縮します。

"B"
   バイナリファイルであることを指定します。
   newsyslog はローテートしたときに syslog の形式でログを出しますが、
   このバイナリファイルのときにはその機能を抑制します。

"-"
   なにもしません。後ろの項目になにか指定したいときに記述します。 
■[/pid_file]
ローテートした後に特定のプロセスにシグナルを送りたいとき、PID が書いてあるファイル名を絶対パスで記述します。
■[sig_num]
pid_file で指定したプロセスにどのシグナルを送るかを指定します。 デフォルトでは SIGHUP です。

具体例

apache、samba、qpopper、postgresqlのログをロテートするため、以下のようにしてみました。
# logfilename          [owner:group]    mode count size when [ZJB] [/pid_file] [sig_num]
/var/log/cron                           600  3     100  *     Z
/var/log/amd.log                        644  7     100  *     Z
/var/log/kerberos.log                   600  7     100  *     Z
/var/log/lpd-errs                       644  7     100  *     Z
/var/log/maillog                        644  7     *    @T00  Z
/var/log/sendmail.st                    644  10    *    168   B
/var/log/messages                       644  5     100  *     Z
/var/log/all.log                        600  7     *    @T00  Z
/var/log/slip.log                       600  3     100  *     Z
/var/log/ppp.log                        600  3     100  *     Z
/var/log/security                       600  10    100  *     Z
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/daily.log                      640  7     *    @T00  Z
/var/log/weekly.log                     640  5     1    $W6D0 Z
/var/log/monthly.log                    640  12    *    $M1D0 Z
/var/log/console.log                    600  5     100  *     Z
/var/log/httpd-access.log               644  10     *   $M1D0 Z   /var/run/httpd.pid 30
/var/log/httpd-error.log                644  10     *   $M1D0 Z   /var/run/httpd.pid 30
/var/log/qpopper.log                    644  10     *   $M1D0 Z
/var/log/pgsql                          644  10     *   $M1D0 Z
/var/log/log.smb                        644  7      *   @T00  Z

    

BACK