こんにちは @sonots です。ちょっと間が空いてしまいましたが、Haikanko OSS化への道と称した Fluentd 連載第三回です。過去の記事はこちら
Haikanko ではこの設定を、監視設定毎にループを回して自動生成しています。
今回は Haikanko が提供する1つのフィーチャー(SIer 的に言うソリューション!)であるログ監視の機能についてお話したいと思います。
やりたいこと
- ログ監視!指定したホストの指定したパスのログファイルに指定したキーワードにマッチする行が現れたら IRC、メールで通知したい
- xx 分の間に xx 件以上ヒットしたら通知したい
- 通知にはヒットしたログメッセージ全件を貼付けたい
というのを fluentd でやりたい。
実現方法
また今回やりたかったことを実現するために、fluent-plugin-ikachan と fluent-plugin-mail に pull request を送らせていただいています。m(_ _)m
設定ファイル
fluent-agent-lite の出力を受け取る fluentd の設定はこんなかんじになっています。
<source> type forward port 22000 </source> <match raw.syslog.**> type copy <store> type grepcounter count_interval 300 input_key message regexp WARN threshold 1 add_tag_prefix count delimiter \n\n </store> </match> <match count.raw.**> type copy <store> type ikachan host <ikachan hostname here> port 4979 channel fluentd_warn message %s\n[%s] syslog total error count: %s out_keys message,input_tag_last,count privmsg_message sonots :D </store> <store> type mail host <mail hostname here> from <from address here> to <to address here> subject syslog message total error count: %s\n%s\n/var/log/syslog\n\n%s\n\n--\nreported by fluentd message_out_keys count,input_tag_last,message </store> </match> |
fluent-plugin-grepcounter の設定
以前書いたので詳しくは fluent-plugin-grepcounter をリリースしました 〜 Haikanko OSS化への道(1) の記事を参照してください!(手抜き
(2013年12月17日 加筆) オプション指定が若干変わったので修正を加えました。
<store> type grepcounter count_interval 300 input_key message regexp WARN threshold 1 add_tag_prefix count delimiter \n\n </store> |
5分間(count_interval) に WARN にマッチする行が1つ(threshold)でもあれば、後続に出力する設定になってますね。
fluent-plugin-ikachan の設定
以前送ったこちらの pull request で、message に改行文字 \n を指定できるように、また別の pull request で privmsg が送れるように機能追加させて頂いてます! m(_ _)m
<store> type ikachan host <ikachan hostname here> port 4979 channel fluentd_warn message %s\n[%s] syslog total error count: %s out_keys message,input_tag_last,count privmsg_message sonots :D </store> |
fluent-plugin-grepcounter から渡ってくる JSON が
count.raw.syslog_warn_app_name.host1: {"count":2,"input_tag":"syslog.host1","input_tag_last":"host1","message":"2013/01/13T07:02:13.232645 WARN POST /auth\n2013/01/13T07:02:43.632145 WARN POST /login"} |
のようになっている場合、この設定により、#fluentd_warn チャンネルに
ikachan: 2013/01/13T07:02:13.232645 WARN POST /auth ikachan: 2013/01/13T07:02:43.632145 WARN POST /login ikachan: [host1] syslog total error count: 2.0 ikachan: sonots :D |
のように通知されます。IRCクライアントが光って気付きやすいですね :D
fluent-plugin-mail の設定
以前送った pull request で subject や message にフォーマット(%s)を指定できるように機能追加させて頂きました。こちらでも message に改行文字 \n を指定できます。
<store> type mail host <mail hostname here> from <from address here> to <to address here> subject syslog message total error count: %s\n%s\n/var/log/syslog\n\n%s\n\n--\nreported by fluentd message_out_keys count,input_tag_last,message </store> |
fluent-plugin-grepcounter から渡ってくる JSON が
count.raw.syslog_warn_app_name.host1: {"count":2,"input_tag":"syslog.host1","input_tag_last":"host1","message":"2013/01/13T07:02:13.232645 WARN POST /auth\n2013/01/13T07:02:43.632145 WARN POST /login"} |
のようになっている場合、この設定により、
From: <from address here> To: <to address here> Subject: syslog total error count: 2.0 host1 /var/log/syslog 2013/01/13T07:02:13.232645 WARN POST /auth 2013/01/13T07:02:43.632145 WARN POST /login -- reported by fluentd |
のような内容のメールが送信されてきます。やった!
まとめ
というかんじでログ監視ができるようになりました!
プラグインを1から作ったりもしましたが、その甲斐あってシンプルに実現できるようになりました ^^
Haikanko ではこの設定を、監視設定毎にループを回して自動生成しています。
次はグラフ描画について一応書いておこうかな。
それでは!