2014年11月15日土曜日

rsyslog + MySQL 特定ホストだけMySQLへの出力を停止するには

以前、シスログをMySQLへ書き出す「rsyslog + MySQL」という記事を書きました。
今回はその記事に少し内容をプラスしてみます。

・ログサーバで、リモートから受け取ったログをファイルとして保存する以外に、MySQLにも保存している
・非常に大量のログを出力するホストがいるが、そのホストからのシスログだけMySQLには出力したいくない

といったシナリオを実現させる方法について2つピックアップしてみます。
※評価は、CentOS6.6 + rsyslogのver8.5.0で行っています


ファシリティで除外する方法


ログを送ってくる側でファシリティを指定できるのであれば、そのファシリティだけMySQLに出力されないようにするのがお手軽です。
*.*;local4.none     :ommysql:localhost,Syslog,rsyslog,PASSWORD


アクションで除外する方法


記述は面倒になりますが、以下のように記述する事で192.168.233.100と192.168.233.101から送られてくるシスログはMySQLへは出力されなくなります。
この場合のキモは”stop”の記述で、それ以降のログ出力の停止、つまりMySQLへのログ出力を停止する事ができます。

$template STOPSQL, "/var/log/%fromhost%/%$year%%$month%%$day%.log"

if \
  ( $fromhost-ip == '192.168.233.100' or \
   $fromhost-ip == '192.168.233.101' ) \
then {
        action(type="omfile"
          DirCreateMode="0750"
          DirGroup="logadmin"
          FileCreateMode="0640"
          FileOwner="logadmin"
          dynaFile="STOPSQL")
        stop
}

*.*     :ommysql:localhost,Syslog,rsyslog,PASSWORD

(備考)
actionとしてomfileを指定する場合、2つ注意することがあります。

1.DirCreateModeやFileCreateModeなどパーミッションに関連するパラメータは、全体に適用されるようにグローバルで指定してあったとしても、上記のように改めて指定する必要があります
2.さらに出力されるファイルの指定(上記だとdynaFileの行)は、一番最後に指定する必要があります

0 件のコメント:

コメントを投稿