slackにmunin連携を追加

Page content

Icingaに続き、muninもslackに通知ができるように頑張ってみた。というかあまり頑張らず、世の中にある通知スクリプトでSlackのIncoming WebhookにPOSTでJSONを送るだけだった。超簡単。 ちなみにslackの連携(Slack Integration)についてはここがとてもわかり易かった。

実装

  1. Slack Incoming Webhook を有効化。APIのURLを確認。
  2. このgoodな解説を基に実装。
    • gist から持ってくる slack_munin.sh/usr/local/munin/bin/ の下に設置した。
    #!/bin/bash SLACK_CHANNEL="#alerts" SLACK_WEBHOOK_URL=“https://hooks.slack.com/services/aaaa/bbbb/cccc" SLACK_USERNAME=“munin” SLACK_ICON_EMOJI=":bird:”

    Url to link from slack notifications

    MUNIN_URL=“https://host.example.com/munin/" input=cat #Set the message icon based on service state if [ “$MUNIN_SERVICESTATE” = “CRITICAL” ] then ICON=":exclamation:” COLOR=“danger” elif [ “$MUNIN_SERVICESTATE” = “WARNING” ] then ICON=":warning:" COLOR=“warning” elif [ “$MUNIN_SERVICESTATE” = “ok” ] then ICON=":white_check_mark:" COLOR=“good” elif [ “$MUNIN_SERVICESTATE” = “OK” ] then ICON=":white_check_mark:" COLOR=“good” elif [ “$MUNIN_SERVICESTATE” = “UNKNOWN” ] then ICON=":question:" COLOR="#00CCCC" else ICON=":white_medium_square:" COLOR="#CCCCCC" fi

    Generate the JSON payload

    PAYLOAD="{"channel": "${SLACK_CHANNEL}", "username": "${SLACK_USERNAME}", "attachments": [{"image_url": "${MUNIN_IMAGE}", "color": "${COLOR}", "fallback": "Munin alert - ${MUNIN_SERVICESTATE}: ${MUNIN_SERVICE} on ${MUNIN_HOST}", "pretext": "${ICON} Munin alert - ${MUNIN_SERVICESTATE}: ${MUNIN_SERVICE} on ${MUNIN_HOST} in ${MUNIN_GROUP} - <${MUNIN_URL}|View Munin>", "fields": [{"title": "Severity", "value": "${MUNIN_SERVICESTATE}", "short": "true"}, {"title": "Service", "value": "${MUNIN_SERVICE}", "short": "true"}, {"title": "Host", "value": "${MUNIN_HOST}", "short": "true"}, {"title": "Current Values", "value": "${input}", "short": "false"}]}]}" #Send message to Slack curl -sX POST -o /dev/null –data “payload=${PAYLOAD}” $SLACK_WEBHOOK_URL 2>&1
    - `/usr/local/munin/etc/munin.conf` にはそれを参照するように設定した。
    - ちなみに画像を参照する `image_url` については、おれおれSSL証明書でやってるhttpsだとだめだったので、httpにしました。ちゃんとしたSSL証明書で作れば大丈夫だと思うけど未検証。
    - アドバイス通り `munin.conf` で一時的に `contact.slack.always_send warning critical ok` という風に "ok" を含むようにして通知のテストを。
    - 当然なんですが、 `slack_munin.sh` は executable にしておくこと!
    
  3. 出来上がると、こんな感じでグラフ付きで通知をくれる。 投稿例

今後

  • 各pluginのしきい値の調整をして、実際に監視に役立てる(Muninを思い出すところから…)
  • グラフをslackに貼り付けることができるが、それがworkしているか確認 -> ここを参照しながら