2015年7月18日土曜日

ログに特定の文字列が出力されたらメールで通知するには(fluentd編)

先日、「ログに特定の文字列が出力されたらメールで通知するには(rsyslog編)」という記事を書きましたが、※ほぼ※同じ事を”fluentd”を使って実現してみましょうというのが今回の内容です。

違いは下記のようになるので、環境(状況)にあわせて使いわけると良いと思います。

  • rsyslogの場合は、1回でも特定の文字列が出力されたら通知が実施されます(2回目以降の通知はある程度抑止できます)。
  • fluentdの場合は、決められた計測時間内に特定文言が決められた回数出力されたらその都度、通知を実施します。  ⇒ 例)10 秒の間に、特定文言が2回出力したらメールで通知(次の10秒でも、特定文言が2回出力されたらまた通知)


※評価は、CentOS6.6(x86_64) + fluentd v0.12.7(gemによる導入)で行っています


fluentdプラグインの導入

※fluetndそのもの導入に関しての説明は割愛させていただきますので、このあたりを参考に導入してください。

今回の目的を達成するのに必要な以下のプラグインを導入します。

fluent-plugin-grepcounter
fluent-plugin-mail


fluentdの設定

今回は、以下の条件でメール通知をする設定としました。

・/var/log/messagesに
・単位時間10秒の間に
・”WARN”の文字列が2回以上出力

</etc/fluent/fluent.confの設定例>
<source>
  type tail
  format syslog
  path /var/log/messages
  tag syslog.messages
  pos_file /var/log/fluent/pos_file
</source>

# 特定文言がログに出力されるのをカウントする部分
<match syslog.messages>
  type grepcounter
  count_interval 10
  input_key message
  regexp "WARN"
  threshold 2
  add_tag_prefix warn.count
</match>

# メール通知をする部分
<match warn.count.syslog.messages>
    type mail
    host localhost
    port 25
    from "warn@fluetd.example.com"
    to "user01@fluentd.example.com"
    subject "[URGENT] WARN logging"
    message Total WARN  count: %s\n\nPlease check your logs
    message_out_keys count
</match>

※※各パラメータの意味は、プラグインのREADME.mdで確認してください
<fluent-plugin-grepcounter>
 https://github.com/sonots/fluent-plugin-grepcounter
<fluent-plugin-mail>
 https://github.com/u-ichi/fluent-plugin-mail

※※私の環境では、以下でも確認できました
<fluent-plugin-grepcounter>
 /usr/local/rvm/gems/ruby-2.2.0/gems/fluent-plugin-grepcounter-0.5.5/README.md
<fluent-plugin-mail>
 /usr/local/rvm/gems/ruby-2.2.0/gems/fluent-plugin-mail-0.1.1/README.md



動作検証

fluetndを起動後、Puttyなどの端末を2つ立ち上げて、
  • 1つは以下のようにloggerコマンドを実行(10秒の間に2回以上実施)
  • もう1つは、メールログと/var/log/messagesをtail

する事で動作を確認する事ができます。
logger WARN

これで、今回設定した”単位時間10秒”に”2回”以上”WARN”の文字列が出力されたら1通ずつメール通知されるようになったと思います。


(参照URL)

http://docs.fluentd.org/articles/splunk-like-grep-and-alert-email



0 件のコメント:

コメントを投稿