td-agentのlogをslackで監視 - 日報 #126
続々と日本中から花粉が集まっております。
集合場所は俺の粘膜だそうで、
村を上げての大祭りです。
さて、本日はFluentd先生のお話。
せっかくfluentd使ってログ取得しているんだから、
td-agent自体のログもfluentdで回収したいものです。
というより、fluentdで生じたエラーに対して俊敏に反応したいものです。
そうじゃないと大事なログをロストしたり、大量のログ吐き出しによってディスク容量が圧迫されたりしちゃうかもしれないですしね。
ということで、td-agent.logを何とか監視したいものです。
td-agent.logをtailしてみているcronスクリプトみたいなのでもいいですが、
fluentd自体で自らのログをタグ付けで拾う機能があったはずなので、
それを使ってもっと簡単にやってみます。
おおまかな流れとしては、
自分のhostに対してtd-agentログを送信して、
自分で受信する。
その後適当にフィルタ条件を設定して、
気になるものだけをslackで投げる。
的な感じにしてみます。
素晴らしいプラグインたちのお陰で、案外簡単です。
使うプラグイン達は4つくらいです。
まずは送信元fluentdが複数個あることを想定して、
レコードを個別にするためrecord-modifierを使用します。
その後、大量にきちゃうことを想定して、
それらをsuppressを使って一旦まとめます。
最終的にそれらメッセージをslackプラグインで送信します。
slackのサービスはIncoming WebHooksを使います。
ということで、まずプラグインを全部インストールしましょう。
# install fluent-plugin-record-modifier fluent-gem install fluent-plugin-record-modifier # install fluent-plugin-suppress fluent-gem install fluent-plugin-suppress # install fluent-plugin-slack fluent-gem install fluent-plugin-slack # install fluent-plugin-filter fluent-gem install fluent-plugin-filter
その後、config設定します。
例えばこんな感じ。
# for logging td-agent <match fluent.**> type record_modifier tag internal.message host ${hostname} include_tag_key tag_key original_tag </match> <match internal.message> type filter all allow deny message: /^detected rotation of/, message: /^following tail of/, message: /^out_forest plants new output/ add_prefix filtered </match> <match filtered.internal.message> type suppress interval 10 num 2 attr_keys host,message remove_tag_prefix filtered. add_tag_prefix slack.suppressed. </match> <match slack.**> type buffered_slack webhook_url https://hooks.slack.com/services/xxxx/xxxx team xxxx channel %23fluentd_warn # %23 means '#' username xxxx color danger icon_emoji :fluentd: buffer_path /tmp/td_slack_buffer flush_interval 5s </match>
これでfluent-catでわざとエラーを発生させてslackが飛ぶかを確認しましょう。
これでfluentdが何か不思議な挙動をしたときは、把握できるようになります。
あぁ安心。