30.2. 設定ファイル(/etc/syslog-ng/syslog-ng.conf)の詳細

カーネルや各種サーバープログラムの出力するシスログメッセージには、ファシリティ(メッセージの種類)とプライオリティ(重要度)と呼ばれる値が設定されています。ファシリティはメッセージの種類を意味し、プライオリティはメッセージの重要度を意味します。syslog-ng デーモンの設定ファイルである /etc/syslog-ng/syslog-ng.conf には、どのファシリティで、どのプライオリティを持つメッセージをどこに出力するか、といった設定を source 、destination、filter の 3 つのパートと log ステートメントによって定義しています。

Turbolinux 11 Server のデフォルトの設定ファイルには以下の記述があります。# で始まる行はコメントです。


options {
    sync (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

source s_sys {
    file ("/proc/kmsg" log_prefix("kernel: "));
    unix-stream ("/dev/log");
    internal();
    # udp(ip(0.0.0.0) port(514));
};

destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" sync(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_mlal { usertty("*"); };

#filter f_filter1   { facility(kern); };
filter f_filter2   { level(info..emerg) and
                     not facility(mail,authpriv,cron); };
filter f_filter3   { facility(authpriv); };
filter f_filter4   { facility(mail); };
filter f_filter5   { level(emerg); };
filter f_filter6   { facility(uucp) or
                     (facility(news) and level(crit..emerg)); };
filter f_filter7   { facility(local7); };
filter f_filter8   { facility(cron); };

#log { source(s_sys); filter(f_filter1); destination(d_cons); };
log { source(s_sys); filter(f_filter2); destination(d_mesg); };
log { source(s_sys); filter(f_filter3); destination(d_auth); };
log { source(s_sys); filter(f_filter4); destination(d_mail); };
log { source(s_sys); filter(f_filter5); destination(d_mlal); };
log { source(s_sys); filter(f_filter6); destination(d_spol); };
log { source(s_sys); filter(f_filter7); destination(d_boot); };
log { source(s_sys); filter(f_filter8); destination(d_cron); };

設定ファイルには、source(ログの受信)、destination(ログの出力)、filter (フィルタリング)の 3 つのパートを指定します。他にこれら 3 つのパートを関連づける log ステートメントと、必要に応じて options の設定を行います。それぞれについて以下に解説します。

source

ログの受信に関する設定を行います。書式は以下の通りです。

source sourcename { source-driver(params); source-driver(params); … };

sourcename は syslog-ng でユニークな値を設定します。source-driver には以下を設定します。

表 30-2. source-driver

file filenamefilename に指定されたファイルを開いてメッセージを読み込みます。
unix-stream filenameSOCK_STREAM モードで指定した UNIX ソケットを開いてログメッセージを受信します。
internalsyslog-ng で生成されるメッセージを出力します。
tcp ip,portログメッセージを受信する TCP ポート番号と IP アドレスの指定
udp ip,portログメッセージを受信する UDP ポート番号と IP アドレスの指定

Turbolinux 11 Server では、/proc/kmsg からカーネルメッセージを読み込み、log_prefix に "kernel: "を指定することで syslogd と同じ出力形式にしています。

destination

ログの送信に関する設定を行います。書式は以下の通りです。

destination destname { destdriver(params); source-driver(params); … };

destname は syslog-ng でユニークな値を設定します。destdriver には以下を設定します。

表 30-3. dest-driver

file filenamefilename に指定されたファイルを開いてメッセージを書き込みます。
unix-stream filenameSOCK_STREAM モードで指定した UNIX ソケットを開いてログメッセージを書き込みます。
userttyメッセージを tty 出力します。
tcp ip,portログメッセージを送信する TCP ポート番号と IP アドレスの指定
udp ip,portログメッセージを送信する UDP ポート番号と IP アドレスの指定

Turbolinux 11 Server では、/dev/console 、/var/log/messages 、/var/log/secure 、/var/log/maillog 、/var/log/spooler 、/var/log/boot.log 、/var/log/cron ファイルへの出力と、usertty がそれぞれ指定されています。

filter

出力するログのフィルタリングに関する設定です。フィルタリングの指定にマッチしたログが destination の指定で出力されます。書式は以下の通りです。

filter filtername { expression; };

filtername は syslog-ng でユニークな値を設定します。expression には以下の項目を and 、or 、not の組み合わせで指定します。

表 30-4. expression

facilityファシリティの指定です。複数指定する際には、",(カンマ)"で区切ります。
level",(カンマ)"で区切ったプライオリティもしくは、".."で区切ったプライオリティの範囲を指定します。
programプログラム名の指定です。正規表現の使用が可能です。
hostホスト名の指定です。
match正規表現を指定することができます。

Turbolinux 11 Server では、mail 、authpriv 、cron を除くすべてのファシリティでレベルが info 〜 emergのログや、認証に関するすべてのログなどといった、syslogd のデフォルトと同様の filter が設定されています。

log

source 、destination、filter での定義をそれぞれ関連づける設定です。書式は以下の通りです。

 log { source sourcename1; source sourcename2; ... 
       filter filtername1; filter filtername2;  ...  
       destination destname1; destination destname2; ... };

source、filter、destination には、各項目で定義したルールの sourcenamefilternamedestname を指定します。

Turbolinux 11 Server では、mail 、authpriv 、cron を除くすべてのファシリティでレベルが info 〜 emergのログを /var/log/messages へ出力、認証に関するすべてのログを /var/log/secure へ出力などといった、syslogd のデフォルトと同様の設定が定義されています。

options

必要に応じて syslog-ng のグローバルなオプション設定を変更できます。書式は以下の通りです。

options { opt1; opt2; ... };

主な opt は以下の表の通りです。他にも指定可能な項目は非常に多くありますのでオンラインマニュアルなどを参照してください。

表 30-5. opt

sync (n)ログ出力前にバッファリングするメッセージ数の指定です。0 はバッファリングしません。
time_reopen (n)切断されたコネクションを再開するまでの待ち秒数指定です。
log_fifo_size (n)出力キューのメッセージ数指定です。
long_hostnames(yes|no)ログ出力のホスト名の前に source で定義した名前(source-name)を出力するかどうかの指定です。
use_dns (yes|no)DNS サーバーへのクエリーを許可するかどうかの指定です。
use_fqdn (yes|no)FQDN を使用するかどうかの指定です。
create_dirs (yes|no)出力先にディレクトリ作成を許可するかどうかの指定です。
keep_hostname (yes|no)ログメッセージに含まれるホスト名をそのまま使用するかどうかの指定です。
stats (n)syslog-ng の状態監視間隔の秒指定です。デフォルトでは 10 分ごとに定期的にバッファ出力失敗などの状態をレポートします。

注意

/etc/syslog-ng/syslog-ng.conf の内容を編集した場合は、変更を反映するために syslog-ng の reload または、再起動が必要です。

# /etc/init.d/syslog-ng reload

30.2.1. ファシリティとプライオリティの指定

filter の expression で指定可能なファシリティとプライオリティには以下があります。

ファシリティの種類

表 30-6. ファシリティの種類

auth認証やセキュリティに関するメッセージ(login、su など)
authpriv認証やセキュリティに関するメッセージ(auth と同様の種類に属しますが出力は異なります)
croncron や at のログ
daemon特定のファシリティを持たない各種デーモンプログラム(named など)
kernカーネルメッセージ
lprプリンタデーモンのログ(cupsd)
mailメールサービスのログ(postfix、sendmail)
newsNEWS サービスのログ
syslogsyslogd のログ
userユーザープログラムのログ
uucpuucp 転送を行うプログラムのログ
local0〜local7任意のプログラムで利用
*すべてのログ

通常、ファシリティはプログラムの作成者によって決定されていますが、OpenSSH や xinetd のように設定ファイルでファシリティを変更できるプログラムも存在します。例えば、OpenSSH のデーモン sshd が出力するシスログメッセージのファシリティは /etc/ssh/sshd_config ファイルの以下の行で指定できます。

# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

SyslogFacility がファシリティの指定です LogLevel は sshd デーモン自体が出力するログのプライオリティを指定するためのものです。sshd のファシリティはデフォルトで AUTH に設定されています。変更した場合には、先頭のコメントを外して、sshd を再起動します。

xinetd の場合は、/etc/xinetd.conf でファシリティの指定が可能です。

defaults
{
        instances               = 60
        log_type                = SYSLOG authpriv
        log_on_success          = HOST PID
        log_on_failure          = HOST
}

デフォルトでは、authpriv が設定されています。authpriv を他のファシリティに変更して xinetd を再起動すれば、xinetd のシスログメッセージは変更したファシリティで出力されます。

プライオリティの種類

表 30-7. プライオリティの種類

emerg非常に危険な状態
alertシステム破損などの緊急事態発生
critハードウェアの傷害などの危険状態
err一般的なエラーメッセージ
warning警告メッセージ
notice通知メッセージ
info一般的な情報
debugデバッグメッセージ
none出力しない
*すべてのメッセージ

30.2.2. Turbolinux 11 Server の /etc/syslog-ng/syslog-ng.conf

上記の解説を踏まえて Turbolinux 11 Server の /etc/syslog-ng/syslog-ng.conf の内容を確認してみます。ファイル中のコメントは消去しています。


options {
    sync (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

source s_sys {
    file ("/proc/kmsg" log_prefix("kernel: "));
    unix-stream ("/dev/log");
    internal();
};

destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" sync(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_mlal { usertty("*"); };

filter f_filter2   { level(info..emerg) and
                     not facility(mail,authpriv,cron); };
filter f_filter3   { facility(authpriv); };
filter f_filter4   { facility(mail); };
filter f_filter5   { level(emerg); };
filter f_filter6   { facility(uucp) or
                     (facility(news) and level(crit..emerg)); };
filter f_filter7   { facility(local7); };
filter f_filter8   { facility(cron); };

log { source(s_sys); filter(f_filter2); destination(d_mesg); };
log { source(s_sys); filter(f_filter3); destination(d_auth); };
log { source(s_sys); filter(f_filter4); destination(d_mail); };
log { source(s_sys); filter(f_filter5); destination(d_mlal); };
log { source(s_sys); filter(f_filter6); destination(d_spol); };
log { source(s_sys); filter(f_filter7); destination(d_boot); };
log { source(s_sys); filter(f_filter8); destination(d_cron); };

以下の設定がデフォルトで記述されています。

  1. ファシリティが mail、authpriv、cron 以外で、プライオリティが info 以上のログを /var/log/messages に出力

  2. ファシリティが authpriv のすべてのログを /var/log/secure に出力

  3. ファシリティが mail のすべてのログを /var/log/maillog に出力

  4. プライオリティが emerg のすべてのログを全ユーザーのコンソールに出力

  5. ファシリティが uucp のすべてと、news でプライオリティが crit 以上のログを /var/log/spooler に出力

  6. ファシリティが local7 のすべてのログを /var/log/boot.log に出力

  7. ファシリティが cron のすべてのログを /var/log/clon に出力

30.2.3. 設定ファイルの確認

syslog-ng に -s オプションを指定して実行すると設定ファイルの構文をチェックすることができます。実行して何も表示されなければ構文的には特に問題はありません。

# syslog-ng -s

エラーが存在する場合は以下のように表示されます。該当箇所を編集し再度確認してください。

syntax error at 72