Last active
February 4, 2025 00:54
-
-
Save anarchivist/58a905515b2eb2b42fe6 to your computer and use it in GitHub Desktop.
Slack notification script for Munin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Slack notification script for Munin | |
# Mark Matienzo (@anarchivist) | |
# | |
# To use: | |
# 1) Create a new incoming webhook for Slack | |
# 2) Edit the configuration variables that start with "SLACK_" below | |
# 3) Add the following to your munin configuration: | |
# | |
# # -- Slack contact configuration | |
# 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 | |
# # note: This has to be on one line for munin to parse properly | |
# 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}}}.} | |
SLACK_CHANNEL="#insert-your-channel" | |
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/insert/your/hookURL" | |
SLACK_USERNAME="munin" | |
SLACK_ICON_EMOJI=":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}\", \"icon_emoji\": \"${SLACK_ICON_EMOJI}\", \"attachments\": [{\"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} - <http://central/munin/|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 |
Saved me a lot of time. tnkxx
I have modified this code to make it work to post alerts to MSteams. Anyone interested can have a look at
https://gist.github.com/nkn1111/71f7646e3c8b635e478e0296afa91a05#file-munin_msteams_notify-sh
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Note: I don't use Munin anymore since I've changed jobs, so this script is effectively unmaintained!