#!/bin/bash # Set Slack WebHook Channel URL SLACK_WEBHOOK_URL="" Usage() { cat << EOF host-by-slack notification script for Icinga 2 The following are mandatory: -4 HOSTADDRESS (\$address$) -d LONGDATETIME (\$icinga.long_date_time$) -l HOSTALIAS (\$host.name$) -n HOSTDISPLAYNAME (\$host.display_name$) -o HOSTOUTPUT (\$host.output$) -s HOSTSTATE (\$host.state$) -t NOTIFICATIONTYPE (\$notification.type$) And these are optional: -b NOTIFICATIONAUTHORNAME (\$notification.author$) -c NOTIFICATIONCOMMENT (\$notification.comment$) -v (\$notification_logtosyslog$, Default: false) -D DEBUG enable debug output - meant for CLI debug only EOF exit 1; } while getopts 4::b:c:d:hi:l:n:o:s:t:u:v:D opt do case "$opt" in 4) HOSTADDRESS=$OPTARG ;; b) NOTIFICATIONAUTHORNAME=$OPTARG ;; c) NOTIFICATIONCOMMENT=$OPTARG ;; d) LONGDATETIME=$OPTARG ;; h) Usage ;; l) HOSTALIAS=$OPTARG ;; n) HOSTDISPLAYNAME=$OPTARG ;; o) HOSTOUTPUT=$OPTARG ;; s) HOSTSTATE=$OPTARG ;; t) NOTIFICATIONTYPE=$OPTARG ;; v) VERBOSE=$OPTARG ;; D) DEBUG=1; echo -e "\n**********************************************\nWARNING: DEBUG MODE, DEACTIVATE ASAP\n**********************************************\n" ;; \?) echo "ERROR: Invalid option -$OPTARG" >&2 Usage ;; :) echo "Missing option argument for -$OPTARG" >&2 Usage ;; *) echo "Unimplemented option: -$OPTARG" >&2 Usage ;; esac done # Set the message icon based on ICINGA Host state if [ "$HOSTSTATE" = "DOWN" ] then COLOR="#FF0000" elif [ "$HOSTSTATE" = "UP" ] then COLOR="#008000" else COLOR="" fi # Send message to Slack read -d '' PAYLOAD << EOF { "attachments": [ { "fallback": "${HOSTSTATE}: ${HOSTDISPLAYNAME}", "color": "${COLOR}", "fields": [ { "title": "Date:", "value": "${LONGDATETIME}", "short": true }, { "title": "Type:", "value": "${NOTIFICATIONTYPE}", "short": true }, { "title": "Host:", "value": "${HOSTALIAS} (${HOSTADDRESS})", "short": true }, { "title": "State:", "value": "${HOSTSTATE}", "short": true }, { "title": "Info:", "value": "${HOSTOUTPUT}", "short": true }, { "title": "Author:", "value": "${NOTIFICATIONAUTHORNAME}", "short": true }, { "title": "Comment:", "value": "${NOTIFICATIONCOMMENT}", "short": true } ] } ] } EOF curl --connect-timeout 30 --max-time 60 -s -S -X POST -H 'Content-type: application/json' --data "${PAYLOAD}" "${SLACK_WEBHOOK_URL}"