/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

Sensu の Slack ハンドラのテンプレート記述方法

Sensu に、通知を Slack に送るハンドラがあるのですが、通知内容を整形する方法を調査しました。

github.com

公式 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.jsonusername, channel を入れるのですが、テンプレートを利用する場合は channelだけはテンプレート側に書かないと動きません。(処理は このあたり