「syslogとは」でも述べたように、syslogd には relay と collector の両方の機能があります。FreeBSD
の場合、その設定は /etc/syslog.conf でおこないます。/etc/syslog.conf は 図6
のような構成になっています。
SELECTOR ACTION
.....
# PROGRAM のログのみ
!PROGRAM
SELECTOR ACTION
.....
# PROGRAM のログ以外
!-PROGRAM
SELECTOR ACTION
.....
# HOSTNAME から受信したログのみ
+HOSTNAME
SELECTOR ACTION
.....
# HOSTNAME から受信したログ以外
-HOSTNAME
SELECTOR ACTION
..... |
|
|
SELECTOR は "facility.priority" でどのログを対象とするかを指定します。";"
で複数並べることや、"*" ですべてを対象とすることができます。
他には、同じ priority ならば、facility を複数並べることもできます。例えば "uucp,news.crit"
は "uucp.crit;news.crit" と同じです。
この priority は、指定されたもの以上のものすべてが対象となります。例えば "*.crit" としたときには、"*.emerg;*.alert;*.crit"
と指定したときと同じことになります。crit だけを指定したいときには、"=" を付けて "*.=crit"
とします。
また、priority に "none" を指定すると、その facility のものを除外することができます。例えば
"*.=info;mail.none" としますと、facility が "mail"
以外でpriority が "info" のものを指定したことになります。
SELECTOR で指定したログの扱いについては、同じ行の後ろにタブで区切り、ACTION を記述します。FreeBSD では
表3 の4種類から選択できます。
| 指定方法 |
動作 |
| FILENAME |
ログを書き出すファイルを絶対パスで指定します。ファイルが存在しないときはログを書き出しません。 |
| @LOGHOST |
ログを転送する先のホスト名を指定します。IPアドレスでも構いません。 |
| |
PROGRAM |
ログをフィルタプログラムに渡します。 |
| USERLIST |
もし指定されたユーザがログインしていれば、その画面に出力します。複数指定するには
"," で区切ります。"*" を指定すると全てのユーザになります。 |
|
|
この SELECTOR と ACTION の組の指定は各行に列挙しておこないますが、アプリケーションや受信元ホストで制限して、ブロックごとに記述することもできます。
"!PROGRAM" のように "!" から始まる行を書くと、設定の対象となるアプリケーションを指定するブロックの宣言になります。"!"
を "!-" にすると指定したもの以外ということを表します。
同様に、"+HOSTNAME" のように "+" から始まるとログの受信元のホスト名を指定するブロックとなります。否定するには
"-" を使います。
これらのブロックの指定は、ファイルの最後に達するか、他のブロックが指定されたときまで有効になります。PROGRAM と HOSTNAME
はともに、"*" で全てを指定することになります。
manpage の syslog.conf(5) にある設定の例を リスト1
に挙げます。syslog.conf では、コメントは空行か "#" で始まる行となっています。
| リスト1 |
/etc/syslog.conf のサンプル |
# err 以上のログ、カーネルのメッセージ、auth の notice 以上のログを取り、
# /dev/console に出力する。authpriv については取らない。
*.err;kern.*;auth.notice;authpriv.none /dev/console
# info 以上のログを取り、/var/log/messages に書き出す。
# authpriv については取らない。
*.info;mail.none;authpriv.none /var/log/messages
# daemon.debug のログだけを /var/log/daemon.debug に書き出す。
daemon.=debug /var/log/daemon.debug
# authpriv のログは /var/log/secure に書き出す。
authpriv.* /var/log/secure
# メールのログはすべて /var/log/maillog に書き出す。
mail.* /var/log/maillog
# emerg のメッセージはすべてのユーザが受け取り、
# arpa.berkeley.edu に転送する。
*.emerg *
*.emerg @arpa.berkeley.edu
# root と eric の2人のユーザが alert と emerg のログを受け取る。
*.alert root,eric
# uucp と news について、crit 以上のログを /var/log/spoolerr に書き出す。
uucp,news.crit /var/log/spoolerr
# 認証に関するメッセージを /usr/local/sbin/authfilter プログラムに渡す。
auth.* | exec /usr/local/sbin/authfilter
# 上の /var/log/spoolerr には、ftpd の全てのログも書き出す。
!ftpd
*.* /var/log/spoolerr
# ftpd の security のログを /var/log/security に書き出す。
security.* /var/log/security
# ftpd の console 出力を /var/log/console.log に書き出す。
console.* /var/log/console.log |
|
|
さまざまなログファイルを指定していますが、一般ユーザに見られたくない場合にはそれぞれ適切なパーミッションを設定しましょう。
設定が意図通りかどうかは、syslogd のデバッグモードで確認できます。上のサンプルの設定で、-d を付けて syslogd
を起動します。
kei# syslogd -d
他の端末から logger でログを流してみます。-p で facility.priority を指定し、-t で TAG を指定します。-i
は PID を添付することを示します。
kei % logger -p daemon.debug -i -t "sample" "sample log"
そうすると、syslogd -d を実行したところでは次のように表示されてログが正しく処理されることがわかります。
logmsg: pri 37, flags 0, from kei, msg Dec 6 12:34:56 sample[12345]:
sample log Logging to FILE /var/log/daemon.debug
設定を変更したときには syslogd に SIGHUP を送ることで有効になります。
kei# kill -HUP `cat /var/run/syslog.pid`
これらの設定だけでなく、他にも syslogd が起動するときのオプションがいくつかあります。どのホストから受け取るかということや、IPv4/IPv6
の指定などです。詳しくは manpage syslogd(8) をご覧ください。 |