syslog-ng 導入

syslog-ng を使ってみました。

インストール

ports/sysutils/syslog-ng にあるのでさっくりインストール。コレを書いてる時点での最新は 1.6.10 です。

設定ファイルの雛形は /usr/local/etc/syslog-ng/syslog-ng.conf.sample にあるので、cp して使いましょー。syslog.conf で何も追加設定してない場合はこのまま使っても問題ないはず。

次に rc.conf に
syslogd_enable="NO"
syslog_ng_enable="YES"
を追加する。

syslogd を停止する。kill `cat /var/run/syslog.pid`

syslog-ng を起動する。/usr/local/etc/rc.d/syslog-ng.sh start

以上で syslogd → syslog-ng への移行完了。デフォルトの/usr/local/etc/rc.d/syslog-ng.sh では pid ファイルを /var/run/syslog.pid に指定しているので newsyslog.conf の書き換えは不要です。

覚書

リモートホストへ log を渡す設定

例: cron log を 192.168.0.5 で稼動しているログサーバに送る設定

source src { unix-dgram("/var/run/log");
             unix-dgram("/var/run/logpriv" perm(0600));
             udp(ip("localhost")); internal(); file("/dev/klog"); };

destination logserver { udp("192.168.0.5" port(514)); };
filter f_cron { facility(cron); };
log { source(src); filter(f_cron); destination(logserver); };
リモートホストから log を受ける設定

例:192.168.0.1 で稼動しているホストの log を 192.168.0.5 で稼動しているログサーバで受ける設定。

source loghost1_src { udp(ip("192.168.0.5") port(514)); };
destination loghost1 { file("/var/log/loghost1"); };
filter f_loghost1 { host("192.168.0.5"); };
log メッセージに反応して処理を行う

例:ルータから来る log の中に changed と言うメッセージがあれば、設定ファイルが変更されたと見て routerchange.sh と言うスクリプトを実行する。

destination report_router_change { program("/usr/local/bin/routerchange.sh"); };
filter f_router_change { match("changed"); }; 
log { source(src); filter(f_router_change); destination(report_router_change); };

スクリプトの中身は管理者宛に mail を送るとか、 rancid と組み合わせて随時 CVS に登録するとか。

IPFW のログを監視して動的に ipfw add するのも良さげ。