3. FreeBSD - メンテナンス・トラブルシュート - ログ - newsyslog 基本

 
3.1 newsyslog 基本
3.2 記述方法
3.2.1 ログファイル名
3.2.2 所有ユーザ名・グループ名
3.2.3 権限
3.2.4 世代数
3.2.5 サイズ
3.2.6 タイミング
3.2.7 保存形式
3.2.8 pid ファイル名・シグナル
3.3 デバッグ

3.1 newsyslog 基本

 FreeBSD 11.1 RELEASE の

/etc/newsyslog.conf
 のデフォルトの状態です。

# configuration file for newsyslog
# $FreeBSD: releng/11.1/etc/newsyslog.conf 266463 2014-05-20 03:00:20Z bdrewery $
#
# Entries which do not specify the '/pid_file' field will cause the
# syslogd process to be signalled when that log file is rotated.  This
# action is only appropriate for log files which are written to by the
# syslogd process (ie, files listed in /etc/syslog.conf).  If there
# is no process which needs to be signalled when a given log file is
# rotated, then the entry for that file should include the 'N' flag.
#
# The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'.
#
# 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  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/amd.log                        644  7     100  *     J
/var/log/auth.log                       600  7     100  @0101T JC
/var/log/console.log                    600  5     100  *     J
/var/log/cron                           600  3     100  *     JC
/var/log/daily.log                      640  7     *    @T00  JN
/var/log/debug.log                      600  7     100  *     JC
/var/log/init.log                       644  3     100  *     J
/var/log/kerberos.log                   600  7     100  *     J
/var/log/lpd-errs                       644  7     100  *     JC
/var/log/mail/maillog                   644  365   *    @T00  JC
/var/log/messages                       644  5     100  @0101T JC
/var/log/monthly.log                    640  12    *    $M1D0 JN
/var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid
/var/log/ppp.log        root:network    640  3     100  *     JC
/var/log/devd.log                       644  3     100  *     JC
/var/log/security                       644  10    100  *     JC
/var/log/sendmail.st                    640  10    *    168   BN
/var/log/utx.log                        644  3     *    @01T05 B
/var/log/weekly.log                     640  5     *    $W6D0 JN
/var/log/xferlog                        600  7     100  *     JC

<include> /etc/newsyslog.conf.d/*
<include> /usr/local/etc/newsyslog.conf.d/*
 newsyslog は起動されるたびに newsyslog.conf を参照しなおしますので、特に何かを再起動させなくても、newsyslog.conf を書き換えておけば、最短1分後には、反映させることが出来ます。

3.2 記述方法

 以下、newsyslog.conf の記述方法を簡単に説明します。
3.2.1 ログファイル名

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
  ↑
 ローテーションさせるログファイル名です。
3.2.2 所有ユーザ名・グループ名

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
						↑
 ログファイルを所有するユーザ名とグループ名です。  省略可能。省略した場合は「root:wheel」になります。
3.2.3 権限

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
										↑
 ログファイルの、ファイルのパーミッション (owner, group, world に対する read, write, execute 権限) を示します。  chmod で指定するアレです。
3.2.4 世代数

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
											 ↑
 バックアップファイルのバージョン最大数です。  3 と書いておけば、.0 ~ .3 までのバックアップファイルができることになります。  数が小さいものほど最新のバックアップファイルになります。  最大数を超えたファイルは自動的に削除されます。
3.2.5 サイズ

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
													↑
 ファイルがこの値を超える値になったらローテーションさせるということを示しています。  単位は、kb(キロバイト)です。  * を指定しているとサイズのチェックは行いません。
3.2.6 タイミング

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
														↑
 いつローテーションさせるかというタイミングの指定です。  指定方法は、多数あります。  * は時間的なタイミングではローテーションしないという意味です。  単に数字を書けば時間を意味し、168 と書けば、168÷24 → 7 ですから、最後にローテーションされた日から1週間後にローテーションさせるという意味です。  @T00 は、毎日午前 0:00 にローテーションさせるという意味です。  @01T05 は、毎日午前 1:05 にローテーションさせるという意味です。  $W6D0 は、毎週土曜日の午前 0:00 にローテーションさせるという意味です。  $M1D0 は、毎月1日の午前 0:00 にローテーションさせるという意味です。  $ で指定するのが便利な使い方で、M を指定すると毎月になりその後に続く数字が日付になります。  W は毎週で、0 が日曜日で 6 の土曜日まで指定できます。  D はその日の時刻で 0 ~ 23 の範囲で指定できます。
3.2.7 保存形式

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
																↑
 バックアップファイルの保存形式を指定します。  いずれか1つを指定するかまたは複数の指定を組み合わせることもできます。  わたしが使用する主な指定
記号 意味
B バイナリもしくはその他の形式。「※1
C ファイルが存在しない場合は作成します。
G 直訳すると『指定した logfile_name がシェルパターンであることを示し、このパターンにマッチする全ファイル名を newsyslog(8) がアーカイブすることを意味します。』って書いてあるんですが、わかりにくいですよね?「※2
J bzip2 形式で圧縮します。
X xz 形式で圧縮します。
Z gzip 形式で圧縮します。
- 何も指定しませんが、以降に何か記述する必要があります。

 ※1 ローテーション時のメッセージ
ログファイルがテキストファイルでバックアップファイルが圧縮形式のようなとき、B を指定していなければローテーションして新規に作成するログファイルの先頭にローテーションした旨のログを出力します。
これが書き込まれると後でログの解析で不便になることがある場合は、テキストファイルであっても B を指定します。
下記は /var/log/messages の例です。


Feb 28 10:00:00 ns newsyslog[16869]: logfile turned over due to size>100K
 ※2 パターンマッチ
直訳だとわかりにくいですが、ディレクトリに複数のログファイルがあるときに *.log の形式でワイルドカードを指定できます。

3.2.8 pid ファイル名・シグナル

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
																		↑
 プロセス ID を調べるために読むファイルを指定します。  このフィールドが存在する場合、このファイルに書かれたプロセス ID に signal_number が送られます。  正しく認識するために、このフィールドは "/" から開始する必要があります。  例えば、apache の場合は、ログファイルがローテーションされて rename されても最初につかんだファイルにずっとログを書き続けます。  なので、シグナルを送って apache を再起動させる必要がありますので、ここを指定します。

3.3 デバッグ

 newsyslog にはデバッグ機能があります。  デバッグ機能を利用するとログの設定ファイルを追加したり、変更したりしたときの動作を確認することができます。  -n オプションを使用すると実際にログの入れ換えは行わず、このオプションが指定されない場合に本来行うはずの処理内容を表示します。  -v オプションを使用すると詳細情報出力モードになります。このモードでは、ログを入れ換えるあるいはそれをスキップするたびに、そのログファイル名と理由を表示します。  デフォルトの状態でこの2つを使用すると以下のようになります。

> newsyslog -nv
Processing /etc/newsyslog.conf
Found: <include> /etc/newsyslog.conf.d/*
Found: <include> /usr/local/etc/newsyslog.conf.d/*
/var/log/all.log <7J>: does not exist, skipped.
/var/log/amd.log <7J>: does not exist, skipped.
/var/log/auth.log <7J>: --> will trim at Mon Jan  1 00:00:00 2018
/var/log/console.log <5J>: does not exist, skipped.
/var/log/cron <3J>: size (Kb): 53 [100] --> skipping
/var/log/daily.log <7J>: does not exist, skipped.
/var/log/debug.log <7J>: size (Kb): 1 [100] --> skipping
/var/log/init.log <3J>: does not exist, skipped.
/var/log/kerberos.log <7J>: does not exist, skipped.
/var/log/lpd-errs <7J>: size (Kb): 1 [100] --> skipping
/var/log/maillog <7J>: --> will trim at Tue Oct 17 00:00:00 2017
/var/log/messages <5J>: --> will trim at Mon Jan  1 00:00:00 2018
/var/log/monthly.log <12J>: does not exist, skipped.
/var/log/pflog <3J>: does not exist, skipped.
/var/log/ppp.log <3J>: size (Kb): 1 [100] --> skipping
/var/log/devd.log <3J>: size (Kb): 1 [100] --> skipping
/var/log/security <10J>: size (Kb): 1 [100] --> skipping
/var/log/sendmail.st <10>:  age (hr): 10 [168] --> skipping
/var/log/utx.log <3>: --> will trim at Wed Nov  1 05:00:00 2017
/var/log/weekly.log <5J>: does not exist, skipped.
/var/log/xferlog <7J>: size (Kb): 1 [100] --> skipping