読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

rsyslogのifの使い方

rsyslog

rsyslogのフィルタはいくつか使い方があるが今回はifを用いた方法...

if <条件> then <Action> 

という文法で一行で書く。

例えば、うちのiptablesのログはメッセージ冒頭に"[IPTABLES]"が入るように設定してある。
これを利用してiptablesログのデフォルト出力先であるkernに"[IPTABLES]"が含まれるログを出力しないようにするには...

if $syslogfacility-text == 'kern' and not ( $msg contains '[IPTABLES]') then ?/var/log/kern.log;template

という感じにする。このようにすると/var/log/kern.logにkernに出力されるログが書き込まれるが、"[IPTABLES]"を含むメッセージは無視されて書き込まれなくなる。
上のように条件は"and"や"or"を書いて複数指定できる。もちろんひとつでもいい。
否定するときは"not"を書けばよい。

上記の例では"contains"という比較条件を使っているが他にも...

  • isequal
    プロパティと値が等しいかを調べる。
  • startwith
    プロパティが指定した文字列で始まるかを調べる。
  • regex
    (基本)正規表現を用いてプロパティと値を比較する。
  • ereregex
    拡張正規表現を用いてプロパティと値を比較する。
  • contains
    指定した文字がプロパティに含まれているか調べる。

がある。

注意としてifの中で用いる文字列はシングルクォートで囲む。ダブルクォートを使うとエラーになる。

しかし例えば

:hostname, isequal, "hoge" /var/log/hoge.log

のようなプロパティベースのフィルターの場合はダブルクォートを用いてシングルクォートは用いない。

また、上のようにプロパティベースの指定方法では":hostname"と書くが、ifを用いるなら"$hostname"とする。

rsyslog 実践ログ管理入門

rsyslog 実践ログ管理入門

Firefox ブラウザ無料ダウンロード