rsyslogの式ベースフィルターで小ハマりしたメモ

そろそろ rsyslog の便利機能も試してみるかと思っていじってたら、式ベースフィルターで小ハマりしたのでメモ。Ubuntu Server 10.04 LTS の rsyslogd 4.2.0.

式ベースフィルターでメッセージにマッチさせる設定をこのように書いたら、

# NG
if $msg contains "foo" then /var/log/foo.log

エラーがあるって言われて有効にならない。

rsyslogd: the last error occured in /etc/rsyslog.d/10-application.conf, line 5
rsyslogd: warning: selector line without actions will be discarded

原因は "foo" とダブルクォートで括っていたこと。シングルクォートにしたら動いた。

# OK
if $msg contains 'foo' then /var/log/foo.log


分かりにくいのは、プロパティーベースフィルターはダブルクォートでないとダメで、シングルクォートだとエラーになる。なんでこんな仕様なんだろうなあ。

# NG
:msg, contains, 'foo' /var/log/foo.log
rsyslogd-3003: error -3003 compare value property - ignoring selector [try http://www.rsyslog.com/e/3003 ]
rsyslogd: the last error occured in /etc/rsyslog.d/10-application.conf, line 7