syslogっていうのはつまり、システムの動作記録をとるものだと思えばいい。誰それがログインしただのどこからメールが届いただの、そういう雑多なものがぼこぼこ記録されている。一部のソフトは別の方法でログを保管することもあるが、種々雑多なプログラムの場合、ほとんどはsyslogツールに丸投げしていることが多い。
だけどsyslogプログラム(syslogd)はあまりにも長い歴史を誇るため、一部の機能は陳腐化しているし動作もモダンとはいえないらしい。よって、もっと軽快でよく動くツールとして syslog-ng を設定した。
なお「ログとり専用マシン」に丸投げする設定を含んでいる。
サーバの全体の動作を規定する。通常はあまり触る必要なし。
データの取り込み元を決める。ここも大概はパッケージ任せでOK。
ただし、ネットから受け取りたい場合だけこんな風に書く。
source net { #udp(); tcp( ip(0.0.0.0) port(514) ); };
UDPは使わなくていい。UDPが必要なのは、古いsyslogdからのデータを受け付けたい時だけであり、それ以外は禁止しておくべきであろう。
行き先、書き込み先である。
ファイルの場合は実マシンの設定を見ればいい。ネットに放つ場合はこうせよ。
destination df_bk1 { file("/var/log/syslog"); tcp("送り先のIP"); };
これで、/var/log/syslogにも落としつつログサーバにも送れる。本も読めるし影絵もできるぞ(違)。
条件式だ。たとえば「マシン某からきたログ限定(host)」とか「とあるサービス限定(program)」とか「ある文字列みっけ(match)」なんて項目を記述してグループ化する。
〜でない(not)とか、〜かつ〜でない(and not)なんて書き方もできるようだ。
# for bk1 filter f_bk1 { host("suzumiyaharuka.de"); }; filter f_syslog { not facility(auth, authpriv); }; filter f_messages { level(info,notice,warn) and not facility(auth,authpriv,cron,daemon,mail,news); }; filter f_mailreject { match("reject:"); };
ソース、条件式、行き先をここでまとめる。まぁ以下を見て。
log { source(net); filter(f_bk1); destination(df_bk1); };
ネットから来たもの、f_bk1の条件に合致する奴はdf_bk1に従ってログが記録される。