SYSLOG.CONF(5) | FreeBSD File Formats Manual | SYSLOG.CONF(5) |
名称
syslog.conf — syslogd(8) 設定ファイル解説
syslog.conf ファイルは、 syslogd(8) プログラムの設定ファイルです。このファイルは、 program と hostname の指定によって分けられた行ブロックから構成されています (分離は、それらの行の後の方で生じます)。それぞれの行は、2つのフィールドを含みます。その行が適用されるメッセージのタイプと優先度を指定する selector フィールドと、 syslogd(8) が選んだ基準とマッチしたメッセージを受けとった場合の動作を指定する action フィールドです。 selector フィールドと action フィールドは、1 つ以上のタブ文字または空白で区切られています。区切りに空白を使用すると、 syslog.conf は、他の Unix や Unix 的システムと互換性が無くなってしまうことに注意してください。この機能は、設定を容易にし (例えば syslog.conf にカットアンドペーストできるようにし)、その際発生し得るミスを避けるため追加されました。しかしながらこの変更は、古いスタイルの syslog.conf (すなわちタブ文字のみ) へのバックワードコンパチビリティを保っています。
selector は、 facility とピリオド (“.”) とオプションの比較フラグ ([ !][ <=>]) そして level で符号化され、間に空白は、含みません。 facility と level の双方とも、大文字小文字の区別はありません。
facility は、メッセージを生成したのがシステムのどの部分なのかを表します。これは、次のキーワードの 1 つです: auth, authpriv, console, cron, daemon, ftp, kern, lpr, mail, mark, news, ntp, security, syslog, user, uucp, と local0 から local7。これらのキーワード (mark を除く) は、 openlog(3) と syslog(3) ライブラリルーチンで指定される“ LOG_”で始まる値と一致します。
比較フラグ を使用して、何を記録するのかを正確に指定できます。デフォルトの比較は、“=>” (またはあなたが好むのなら“>=”) であり、指定した facility リストからの level 以上のレベルのメッセージを記録することを意味します。“ !
”で開始する比較フラグは、その論理的意味を反転させます。“!=info”は、info 以外の全レベルを意味し、“!notice”は、“<notice”と同じ意味です。
level は、メッセージの重要度を表し、以下のキーワードの順に高から低になります: emerg, crit, alert, err, warning, notice, info と debug。これらのキーワードは、 syslog(3) ライブラリルーチンで指定される“ LOG_”で始まる値と一致します。
それぞれの行ブロックは、 program か hostname の指定によって前のブロックと区別されます。ブロックは、最新の program 指定および hostname 指定に対応するメッセージのみをログします。よって、‘ ppp
’を program として選択するブロックに、 hostname ‘ dialhost
’からのメッセージを選択するブロックが直後に続くと、第 2 のブロックは、dialhost 上の ppp(8) プログラムからのメッセージのみをログします。
program 指定は、行の先頭が‘ #!prog
’または‘ !prog
’ (前者は、以前の syslogd との互換性のためのものです。例えば syslog.conf ファイルを共有したい時などに便利です) で始まり、引き続くブロックは、 syslog(3) を呼び出す特定のプログラムと関連付けられています。 program 指定‘ foo
’は、‘ foo:
’というプレフィックスを持つカーネルログメッセージにもマッチします。‘ #!+prog
’または‘ !+prog
’の指定は、前述のものと正に同じ動作をします。‘ #!-prog
’または‘ !-prog
’の指定は、指定したプログラム以外からのメッセージにマッチします。複数のプログラムをコンマで区切って列挙可能です。‘ !prog1,prog2
’は、どちらのプログラムからのメッセージにもマッチし、‘ !-prog1,prog2
’は、‘ prog1
’と‘ prog2
’以外からのすべてのメッセージにマッチします。
hostname 指定で‘ #+hostname
’または‘ +hostname
’という書式のものは、これに引き続くブロックを、指定したホスト名からのメッセージに適用させます。また、 hostname 指定で‘ #-hostname
’または‘ -hostname
’という指定のものは、これに引き続くブロックを、指定したホスト名以外からのメッセージに適用させます。ホスト名が‘ @
’として与えられると、ローカルホスト名が使用されます。プログラムの指定と同様、コンマで区切った複数の値をホスト名の指定として使用可能です。
program 指定または hostname 指定は、プログラム名またはホスト名に‘ *
’を指定することによりリセット可能です。
facility と level の両方のキーワードとその意味のより詳細な説明を知りたい場合は、 syslog(3) を参照してください。選択は、 facility で行なう方が program で行なうよりも好まれています。なぜなら、後者は、ネットワーク環境の中では、簡単に変化してしまう場合があるからです。しかし、適切な facility が本当に存在しない場合もあります。
もし facility 指定に一致したメッセージを受けとり、なおかつそれが指定した level (もしくは、それ以上の level) だった場合、またはメッセージ中の日付の後ろの最初の単語が program と一致した場合、 action フィールドで指定された動作が選択されます。
複数の selector を、セミコロン (“;”) によって区切ることにより、1 つの action に対して指定することができます。しかしそれぞれの selector は、その前にある指定を上書き修正できてしまいますので注意してください。
複数の facility は、コンマ (“,”) によって区切ることにより 1 つの level を指定することができます。
アスタリスク (“*”) は、全ての facility、全ての levels、または全ての programs を指定するのに使用できます。
特別な facility である“mark”は、20分毎に“info”の優先度を持つメッセージを受け取ります ( syslogd(8) を参照)。これは、アスタリスクを含む facility フィールドには適用されません。
特別な level である“none”は、特定の facility を無効にします。
それぞれの行の action フィールドは、 selector フィールドに指定されたメッセージを受け取った際の動作を指定します。動作指定には、次の 5つの形式があります:
- パス名 (先頭がスラッシュで始まります)。該当するメッセージは、そのファイルに追加されます。
カーネルメッセージが適切に書き込まれることを保証するために、カーネルからメッセージを書き込んだ後に syslog.conf は、 fsync(2) を呼び出します。他のメッセージは、明示的に同期書き込みすることはありません。パス名の前にマイナス符号“-”を付けることで、指定したファイルに対するカーネルメッセージ 1 つごとの同期取りをしなくなります。但し、書き込みの直後にシステムがクラッシュした場合、情報が失われるかもしれないことは留意して下さい。それでも、“-”オプションの使用は、パフォーマンスを改善します。カーネルが大量のメッセージをログする場合は、とくにそうです。
- ホスト名 ((“@”) 文字から始まる必要があります)。該当するメッセージは、指定されたホストの syslogd(8) プログラムに転送されます。ポート番号がコロン (‘
:
’) の後に追加されるなら、そのポートは、通常の syslog ポートよりむしろ宛先ポートとして使用されます。角括弧 (‘[
’と‘]
’) でアドレス部分を囲むことによって、IPv6 アドレスを使用することができます。 - コンマで区切られたユーザのリスト。該当するメッセージは、指定されたユーザがログインしていれば、そのユーザの画面に出力されます。
- 1 つのアスタリスク。該当するメッセージは、ログイン中の全てのユーザの画面に出力されます。
- 垂直バー (“|”) とそれに続くコマンド。該当したメッセージをパイプを使ってコマンドに渡すことができます。このコマンドは、 sh(1) によって評価されるので、通常のシェルメタキャラクタや入力/出力リダイレクトを利用できます。 (しかし実行されたコマンドからの stdio(3) バッファされた出力のリダイレクトは、余計な遅延を引き起こしたり、あるいはシグナルによってロギング中のサブプロセスが終了した場合など出力データを失うことがあるかもしれないことに注意してください) コマンドそれ自身は、 stdout と stderr を /dev/null にリダイレクトして動作します。 SIGHUP を受け取ると、 syslogd(8) は、そのプロセスとのパイプを閉じます。もしそのプロセスが自発的に終了しない場合は、60 秒の猶予期間の後 SIGTERM を送ります。
コマンドは、パイプ経由で送るべきデータが到着した際に 1 度だけ起動されます。その後、コマンドが終了した場合には、必要に応じて再起動されます。そのため、1 行の入力だけをサブプロセスに引き渡すことが望ましいのならば、 (もし多くのメッセージが速く流れる場合には、資源を大量に消費する可能性がありますが) 1 行の入力があった後に終了する事によって達成する事ができます。必要ならば、この効果を得るためにラッパスクリプトを書くこともできます。
そのコマンドが完全なパイプラインでない場合、コマンドを exec で起動すると、起動したシェルプロセスがコマンドの完了を待たなくなるので便利かもしれません。警告: このプロセスは、 syslogd(8) の UID のもとで動きます。通常は、スーパユーザです。
空行、および、最初の空白でない文字がハッシュ (“#”) 文字である行は、無視されます。‘ #
’が行の中央に置かれるなら、‘ #
’文字とその後の行の残りは、無視されます。特別な意味を防ぐために、‘ #
’文字は、‘ \
’をつけてエスケープすることができます。この場合、先行する‘ \
’は、削除され、‘ #
’は、普通の文字として取り扱われます。
実装に関する注
“kern”ファシリティは、通常、ローカルのカーネルから生成されるメッセージ用に予約されています。ファシリティ“kern”でログされた他のメッセージは、通常、ファシリティ“user”に変換されます。この変換は、無効化可能です。詳細は、 syslogd(8) を参照してください。関連ファイル
- /etc/syslog.conf
- syslogd(8) 設定ファイル
使用例
設定ファイルは、次のようになります:
# err レベル以上の全てのメッセージ、全てのレベルの kernel メッセージ、 # notice レベルの auth メッセージをコンソールに出力します. # プライベートな認証メッセージは、記録をとりません! *.err;kern.*;auth.notice;authpriv.none;mail.crit /dev/console # info 以上のレベルを持つ (mail を除く) 全てのメッセージを記録します. # プライベートな認証メッセージは、記録をとりません! *.info;mail.none;authpriv.none /var/log/messages # debug レベルのみの daemon メッセージを記録します daemon.=debug /var/log/daemon.debug # authpriv ファイルには、アクセス制限があります. authpriv.* /var/log/secure # 全てのレベルの mail メッセージを一箇所にまとめて記録します. mail.* /var/log/maillog # emerg (非常事態) レベルの全てのメッセージは、全員が受け取ります. *.emerg * *.emerg @arpa.berkeley.edu # alert レベル以上のメッセージを root と eric の画面に表示されます. *.alert root,eric # err レベル以上の mail と news のエラーを特別なファイルに保存します. uucp,news.crit /var/log/spoolerr # 全てのレベルの認証メッセージをフィルタにパイプします. auth.* |exec /usr/local/sbin/authfilter # セキュリティメッセージを別のファイルに保存します. security.* /var/log/security # /dev/console への書き込みを別のファイルに保存します. console.* /var/log/console.log # ftpd のトランザクションを mail と news にあわせて保存します. !ftpd *.* /var/log/spoolerr # ipfw メッセージをすべてのメッセージの後で同期書き込みなしで保存します. !ipfw *.* -/var/log/ipfw
バグ
複数の selector 指定は、時々思ったように効果を発揮しない事があります。例えば、“mail.crit,*.err”と設定すると、“mail”ファシリティのメッセージのレベルは、“err”かそれ以上となり、“crit”かそれ以上のレベルにはなりません。ネットワーク環境においては、全てのオペレーティングシステムが同じ facility 名のセットを実装しているわけではない点に注意してください。 authpriv, cron, ftp, ntp といったこの実装において知られた facility が、目的のシステムには、存在しないかもしれません。更に悪い事に、 DEC UNIX は、AdvFS ファイルシステムのログイベントに facility 番号 10 (この実装では、authpriv に該当します) を使っています。
September 12, 2012 | FreeBSD |