syslog.conf -
syslogd(8)
の設定ファイル
syslog.conf は UNIX
ライクなシステムでそのシステムメッセージを記録する
syslogd(8)
のための設定ファイルである。このファイルは記録のルールを規定する。固有の
機能については
sysklogd(8)
の man
ページを参照すること。
ルールは
selector
フィールドと
action
フィールドの二つのフィールドで構成する。これらの二つのフィールドは
一つ以上の空白文字か
TAB
文字で区切られる。selector
フィールドは指定さ
れた action を適用する facility
と priority
のパターンを規定する。
シャープ記号(``#'')で始まる行と空行は無視する。
このバージョンの
syslogd
は拡張された文法を認識することができる。
行の末尾にバックスラッシュ(``\'')を置くことによって、
ひとつのルールを複数行に分けることができる。
selector
フィールドはさらにピリオド(``.'')で区切られる
facility と
priority
の二つの部分で構成する。
どちらの部分も文字の大文字小文字は区別しない。また、数字を用いることも
可能であるが、これは使用しない方がよい。使用した時には警告がなされる。
facility と priority については
syslog(3)
に記述されている。以下に記述する各種の名前は
/usr/include/syslog.h における
LOG_-values
の同じ名前のものに対応する。
facility
は次のキーワードのいずれかである:
auth、
authpriv、
cron、
daemon、
kern、
lpr、
mail、
mark、
news、
security
(
auth と同じ)、
syslog、
user、
uucp、
local0から
local7。
このうち
security
は今後は利用するべきでなく、また、
mark
は内部利用のためのものなので、アプリケーションレベルで用いるべきではない。
ただし利用できないわけではない。
facility
はメッセージを生成するサブシステムを規定する、すなわち(例えば)全てのメ
イルプログラムは syslog
を用いてログを記録する場合は
mail facility
(
LOG_MAIL)
を用いる。
priority
は以下のキーワードのいずれかである(昇順):
debug,
info,
notice,
warning,
warn (
warning と同じ),
err,
error (
err
と同じ),
crit,
alert,
emerg,
panic (
emergと同じ)
.
このうちキーワード
error、
warn、
panic
については、同等のものがあるので今後は利用するべきでない。
priority
はメッセージの重要性を定義する。
オリジナルの BSD
システムの syslogd
の動作は、指示された
priority とそれ
よりも順位の高い全てのメッセージが与えられた
action
に沿って記録される、
というものである。この
syslogd(8)
もそれと同じ動作であるが、いくつかの拡張機能も有する。
上述の名前に加え、
syslogd(8)
は以下の拡張についても理解する:
アスタリスク(``*'')は、
それが用いられている場所
(すなわちピリオドの前か後ろか)
に応じて、 全ての facility
かまたは全ての priority
を表わす。
キーワード
none
は、それが与えられた
facility についてはどの priority
も
指定しないことを意味する
(つまり除外される)。
コンマ(``,'')を用いて、同じ
priority
を示す一文のなかに複数の
facility
を指定することが可能である。facility
の個数に制限はない。ただしこのよ
うな記述が可能なのは
facility についてのみで、
priority についてのその
ような記述は無視するので注意すること。
セミコロン(``;'')を区切りに用いて複数の
selector について同一の
action
を指定することができる。
selector フィールドの selector
は先行するものを上書きしてしまうことに注意するこ
と。この動作を用いて特定の
priority
を除外することも可能である。
この
syslogd(8)
はオリジナルの BSD
のソースを拡張する構文を持っていて、より直観的な利
用を可能にしている。イコール記号(``='')を
priority
に接頭すると、その
priority
のもののみを記録するようにすることができる。エクスクラメーショ
ンマーク(``!'')を接頭するとその
priority とそれよりも高い
priority の
もののすべてを無視させることができる(イコール記号とエクスクラメーショ
ンマークの両方を同時に指定することは可能である)。この拡張の両方を同時
に用いる場合、イコール記号の前にエクスクラメーションマークを置くことで
その priority
のみ無視する。
ルールの action
フィールドには ``logfile''
を指示する。``logfile'' は
実存するファイルでなくてもかまわない。
syslogd(8)
は以下の動作を用意している。
メッセージはそのファイルに記録される。ファイル名は
``/'' で始まるフル
パスで指定すること。
マイナス記号 ``-''
を接頭すると、記録の際のファイルシステムバッファの
フラッシュ動作を抑制する。これを用いると、書き込み動作の直後にシステム
に障害が発生した場合、情報を失なう可能性があることに注意すること。しか
しながらこの機能は特に騒々しくロギングするプログラムを動作させる際のい
くらかの性能改善には役に立つ。
この
syslogd(8)
は名前付きパイプ(FIFO)への出力機能を備えている。
ファイル名の先頭にパイプ記号
(``|'') を書くと、
メッセージの出力先をその名前の
FIFO にできる。
これはデバッグ作業に役立つ。FIFO
は
syslogd(8)
のスタートに先立ち、
mkfifo(1)
コマンドにより生成される必要があることに注意すること。
ファイルとして tty
を指示した場合は、tty
用の処理がなされる。
/dev/console も同じ。
この
syslogd(8)
は完全なリモートロギング機能も提供する。すなわちメッセージを
syslogd(8)
の動作するリモートのホストに送信することができ、またリモートのホストか
らのメッセージを受信することもできる。リモートのホストはメッセージをそ
れ以上他のホストへ転送することはせず、その機械にローカルに記録するはずだ。
他のホストへメッセージを送信するにはアットマーク(``@'')をそのホスト名
に接頭する。
この機能を用いると、他の全てのコンピュータにリモートに記録させることで、
すべての syslog
メッセージを一台のホストで制御することができる。これは
管理上の困難を解消する。
通常、特に重要なメッセージはそのコンピュータの
``root'' にも宛てられる
ものである。login
しているときにメッセージを受けとるべきユーザのリスト
を指示することができる。コンマ(``,'')で区切って複数のユーザを指定する
こともできる。メイルで送ろうと思ってはいけない。それでは手遅れになって
しまうかもしれない。
システムになにか具合が悪いことが発生することを通知するために、緊急のメッ
セージはしばしばその時オンラインになっている全てのユーザに通知される。
この
wall(1)的機能
を利用するためにはアスタリスク(``*'')を用いる。
ここに実在する site
の実際の設定例の一部を用いたいくつかの設定例を挙げ
る。うまくいけば、たぶん、これで設定上の疑問はすべて解消できると思うが、
なにかあったら筆者( Joey
)宛てに連絡いただきたい。
-
# 危機的状況を /var/adm/critical に保存する。
#
*.=crit;kern.none /var/adm/critical
priority が
crit
の、カーネルメッセージを除くすべてのメッセージをファイル
/var/adm/critical に保存する。
-
# カーネルメッセージは /var/adm/kernel に
# 保存し、さらに critical 以上の重要度の
# メッセージは他のホストへ配信しコンソー
# ルにも表示する。
#
kern.* /var/adm/kernel
kern.crit @finlandia
kern.crit /dev/console
kern.info;kern.!err /var/adm/kernel-info
一番目のルールにより、facility
が kern
のメッセージはファイル
/var/adm/kernel
に記録される。
二番目の文により、
priority が
crit
かそれよりも高い全てのメッセージはリモートのホスト
finlandia へ送信さ
れる。これは、ホストの障害が生じて保存されたメッセージを読みだすことが
できなくなるような回復不能エラーがディスク装置に発生した際に有効である。
リモートのホストに残されたメッセージで障害の原因調査に取り掛ることもで
きる。
三番目のルールはそのコンピュータで作業している誰かがそのメッセージを得
ることができるように、実際のコンソールに表示する。
四行目は、syslogd にpriorityが
info から
warning
のカーネルメッセージをファイル
/var/adm/kernel-info
に保存するよう指示する。
err よりも高い priority
を持つものは除外される。
-
# tcp wrapper は mail.info でロギングする、
# すべての接続を tty12 に表示する。
#
mail.=info /dev/tty12
この例は
mail.info
(ソースコード上では
LOG_MAIL |
LOG_INFO)
を用いる全てのメッセージを
第 12 コンソール
/dev/tty12
に表示する。例えば
tcpwrapper
tcpd(8)
はこの設定を既定値として用いている。
-
# メイル関係は一つのファイルへ保存する。
#
mail.*;mail.!=info /var/adm/mail
このパターンは facility が
mail
の全てのメッセージから
priority が
info
であるものを除くことを示す。これらのメッセージはファイル
/var/adm/mail に記録する。
-
# mail.info と news.info を /var/adm/info ヘ記録する。
#
mail,news.=info /var/adm/info
この例は
mail.info と
news.info
の両方の全てのメッセージを抜き出し、ファイル
/var/adm/info に保存する。
-
# info と notice は /var/log/messages へ記録する。
#
*.=info;*.=notice;\
mail.none /var/log/messages
この例は
syslogd に
facility が
mail
であるのものを除く他の
全て
info と
notice
の両方の priority
の全てのメッセージをファイル
/var/log/messages
に保存するよう指示する。
-
# info メッセージは /var/log/messages へ記録する。
#
*.=info;\
mail,news.none /var/log/messages
この指示により
syslogd は
priority
info
の全てのメッセージをファイル
/var/log/messages
に記録する。ただし
facility が
mail と
news
の両方のメッセージは保存しない。
-
# 緊急メッセージを wall で表示する。
#
*.=emerg *
このルールは
syslogd
に全ての緊急のメッセージをその時ログインしている全てのユーザに伝えるよ
う指示する。これが wall
action である。
-
# priority が alert のメッセージは管理担当へ
# 送る。
*.alert root,joey
このルールは priority が
alert
かそれよりも高い全てのメッセージを操作者、すなわちユーザ名
``root'' と ``joey''
がログインしていればその端末に表示する。
-
*.* @finlandia
このルールは全てのメッセージを
finlandia
と呼ばれるリモートのホストに
転送する。これは特に一群のコンピュータの全ての
syslog メッセージを一台
のコンピュータに保存するのに役に立つ。
syslogd の設定は
オリジナルの BSD
ソースによるものとは少し異なる文法を使用する。
元々は、指示された
priority とそれよりも高い
priority
の全てのメッセージが
ログファイルに記録されていた。この
syslogd
には、より柔軟で直観的にわかりやすい設定が可能となるように修飾子
``=''、
``!''、``-''が追加されている。
オリジナルの BSD の syslogd
では selector フィールドと
action
フィールドの区切りの文字として空白文字を利用することはできない(TAB
文
字でなければならない)。
- /etc/syslog.conf
-
syslogd
の設定ファイル
複数の selector
を指示するとしばしば直観的でなくなる。例えば、
``mail.crit,*.err'' は facility が ``mail''
のメッセージのうち
``crit'' より 高い priority
、ではなくて``err''
よりも高い priority
を指示していることに
なる。
sysklogd(8),
klogd(8),
logger(1),
syslog(2),
syslog(3)
syslogd は Greg Wettstein (
[email protected]) が BSD
のソースコードから Linux
で動作するように移植し、Matin
Schulze (
[email protected])
がいくつかのバグ
フィックスと新しい機能の追加をした。