2016.01.27   |   Memo

MuninのアラートをSlackに飛ばすためのメモ


サーバーの稼働状況を監視できるMuninを使って、サーバー異常をSlackに通知するためのメモ。
画像みたいな感じでSlackに飛んできます。
(Warning、Errorのステータスに応じて色やemojiが変わります。)

https://gist.github.com/anarchivist/58a905515b2eb2b42fe6
こちらのスクリプトを利用すればSlackに通知できるみたいです。

導入手順

/usr/local/bin/notify_slack_munin というファイルを作り、上記スクリプトをコピペします。

SLACK_CHANNEL="#insert-your-channel"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/insert/your/hookURL"
SLACK_USERNAME="munin"
SLACK_ICON_EMOJI=":munin:"

この部分はお好みで変更してください。
SLACK_WEBHOOK_URLはSlackのIncoming Webhookから発行したURLを貼り付けます。
ファイルを作ったら実行権限も付与しておきます。

次にMuninの設定をいじります。
/etc/munin/munin.confを開き、

contact.slack.command MUNIN_SERVICESTATE="${var:worst}" MUNIN_HOST="${var:host}" MUNIN_SERVICE="${var:graph_title}" MUNIN_GROUP=${var:group} /usr/local/bin/notify_slack_munin
contact.slack.always_send warning critical
contact.slack.text ${if:cfields \u000A* CRITICALs:${loop<,>:cfields  ${var:label} is ${var:value} (outside range [${var:crange}])${if:extinfo : ${var:extinfo}}}.}${if:wfields \u000A* WARNINGs:${loop<,>:wfields  ${var:label} is ${var:value} (outside range [${var:wrange}])${if:extinfo : ${var:extinfo}}}.}${if:ufields \u000A* UNKNOWNs:${loop<,>:ufields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}${if:fofields \u000A* OKs:${loop<,>:fofields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}

ノードの設定が始まる前 (カギカッコ[ xxx ]が出てくる前) あたりにこの3行を貼り付けます。折り返して見づらいですが、改行とかを入れてしまうと正常に動かないのでそのまま貼り付けてください。(先ほどのgistの冒頭にも同じものがコメントアウトで記載されています)

contact.slack.always_send warning critical この行は通知レベルの設定なので変更可能です。okを追加すると正常時でも通知が飛ぶので動作確認に利用できます。

最後にノードごとのアラートのしきい値を設定すれば完了です。メールなどですでに設定している場合はとくに変更は必要ありません。