#!/bin/bash Usage() { cat << EOF service-by-slack notification script for Icinga 2 by Flavio Meyer The following are required: -4 HOSTADDRESS (\$address$) -d LONGDATETIME (\$icinga.long_date_time$) -e SERVICENAME (\$service.name$) -l HOSTALIAS (\$host.name$) -n HOSTDISPLAYNAME (\$host.display_name$) -o SERVICEOUTPUT (\$service.output$) -s SERVICESTATE (\$service.state$) -t NOTIFICATIONTYPE (\$notification.type$) -u SERVICEDISPLAYNAME (\$service.display_name$) 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:e:h:l:n:o:S:s:t:u:v:D opt do case "$opt" in 4) HOSTADDRESS=$OPTARG ;; b) NOTIFICATIONAUTHORNAME=$OPTARG ;; c) NOTIFICATIONCOMMENT=$OPTARG ;; d) LONGDATETIME=$OPTARG ;; e) SERVICENAME=$OPTARG ;; h) Usage ;; l) HOSTALIAS=$OPTARG ;; n) HOSTDISPLAYNAME=$OPTARG ;; o) SERVICEOUTPUT=$OPTARG ;; S) SLACK_WEBHOOK_URL=$OPTARG ;; s) SERVICESTATE=$OPTARG ;; t) NOTIFICATIONTYPE=$OPTARG ;; u) SERVICEDISPLAYNAME=$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 service state if [ "$SERVICESTATE" = "CRITICAL" ] then COLOR="#FF0000" elif [ "$SERVICESTATE" = "WARNING" ] then COLOR="#FFA500" elif [ "$SERVICESTATE" = "OK" ] then COLOR="#008000" elif [ "$SERVICESTATE" = "UNKNOWN" ] then COLOR="#800080" else COLOR="" fi # Send message to Slack read -d '' PAYLOAD << EOF { "attachments": [ { "fallback": "${SERVICESTATE}: ${HOSTDISPLAYNAME} - ${SERVICEDISPLAYNAME}", "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": "${SERVICESTATE}", "short": true }, { "title": "Service:", "value": "${SERVICEDISPLAYNAME}", "short": true }, { "title": "Info:", "value": "${SERVICEOUTPUT}", "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}"