[syslog-ng] 「特定の送信元 IP・それ以外」のフィルタ設定

久々に syslog-ng を使う機会があったのでメモ。

やりたいこと

  • いくつかの特定の IP は、1 つのログファイルにまとめたい
  • それ以外は、IP 毎にファイルを分割したい

たとえば、ネットワーク機器のログは 1 つにまとめ、その他サーバ機器のログは個別に分割したい、というような時。

設定

こんな感じにする

source s_remote {
  tcp(ip(0.0.0.0) port(514)); udp(ip(0.0.0.0) port(514));
};

filter f_specific {
  host(^172.16.0.1$) or
  host(^172.16.0.2$) or
  host(^172.16.0.253$) or
  host(^172.16.0.254$);
};

filter f_other {
  not filter(f_specific);
};

destination d_separate {
  file("/var/log/syslog-ng/$HOST/syslog.$YEAR-$MONTH-$DAY" create_dirs(yes));
};

destination d_merge {
  file("/var/log/syslog-ng/merged/syslog.$YEAR-$MONTH-$DAY" create_dirs(yes));
};

log { source(s_remote); filter(f_specific); destination(d_merge); };
log { source(s_remote); filter(f_other); destination(d_separate); };

ポイントは、f_specific を否定することにより、"特定の送信元 IP" と "それ以外の IP" というフィルタを作っている点。

※ host() の引数は regexp であることに注意


  • 初稿 (Mon Mar 23 22:44:13 JST 2015)