Sensu に、通知を Slack に送るハンドラがあるのですが、通知内容を整形する方法を調査しました。
公式 GitHub にも簡単に紹介されているのですが、サンプルが見当たらなかったのでご紹介します:
/etc/sensu/conf.d/slack.json
例として slack.json というファイルを用意しました。
Sensu は conf.d/ 配下の .json ファイルをかき集めるので、slack.json という形でなくても構いません。 handlers.json の中に書くのが普通でしょうか。
{ "slack": { "webhook_url": "<WebHook URL>", "payload_template" : "/etc/sensu/conf.d/slack_payload_template.erb" } }
/etc/sensu/conf.d/slack_payload_template.erb
テンプレートは ERB 形式です。conf.d/ 配下でなくてもよいので、適当な場所に保存します。
{ "username": "<ユーザー名>", "channel": "<チャネル名>", "attachments": [ { "fallback": "<%= @event["check"]["output"] %>", "color": "<%= color %>", "title": "<%= @event["check"]["name"] %> (<%= @event["client"]["name"] %>)", "text": "<%= @event["check"]["output"].gsub('"', '\\"') %>" } ] }
テンプレートを利用しない場合は、slack.json
に username
, channel
を入れるのですが、テンプレートを利用する場合は channel
だけはテンプレート側に書かないと動きません。(処理は このあたり )