Skip to content

Instantly share code, notes, and snippets.

@jssjr
Created October 21, 2011 14:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jssjr/1304037 to your computer and use it in GitHub Desktop.
Save jssjr/1304037 to your computer and use it in GitHub Desktop.
Enhanced Nagios Email Notification Script
#!/usr/local/bin/bash
NAGIOS_BASEURL="https://mynagios.server.tld"
NAGIOS_CGIURL="${NAGIOS_BASEURL}/nagios/cgi-bin/"
function hostgroup_links {
URL="${NAGIOS_CGIURL}status.cgi?hostgroup="
[ -n "$*" ] && echo $* | tr ',' "\n" | sed -e 's,^, ,' -e "s,^ \([^ ]*\)$, \1 (${URL}\1)," || echo ' NONE';
}
function servicegroup_links {
URL="${NAGIOS_CGIURL}status.cgi?servicegroup="
[ -n "$*" ] && echo $* | tr ',' "\n" | sed -e 's,^, ,' -e "s,^ \([^ ]*\)$, \1 (${URL}\1)," || echo ' NONE';
}
function format_list {
[ -n "$*" ] && echo $* | tr ',' "\n" | sed -e 's/^/ /' || echo ' NONE';
}
function notify_service_short {
cat <<EOT
${NAGIOS_SERVICESTATE} - ${NAGIOS_SERVICEDESC} - "${NAGIOS_SERVICEOUTPUT}"
EOT
}
function notify_service_long {
cat <<EOT
${NAGIOS_SERVICESTATE} - ${NAGIOS_SERVICEDESC} (${NAGIOS_SERVICEDISPLAYNAME})
Result: "${NAGIOS_SERVICEOUTPUT}"
EOT
if [ "${NAGIOS_NOTIFICATIONTYPE}" = "ACKNOWLEDGEMENT" ] ; then
cat <<EOT
----------------------------------------------------------------------
ACKNOWLEDGEMENT
----------------------------------------------------------------------
Author: ${NAGIOS_SERVICEACKAUTHOR}
Comment: ${NAGIOS_SERVICEACKCOMMENT}
EOT
fi
cat <<EOT
----------------------------------------------------------------------
SERVICE STATE INFORMATION
----------------------------------------------------------------------
Address: ${NAGIOS_HOSTADDRESS}
Status: ${NAGIOS_SERVICESTATE} (for ${NAGIOS_SERVICEDURATION})
Attempt: ${NAGIOS_SERVICEATTEMPT}/${NAGIOS_MAXSERVICEATTEMPTS} (${NAGIOS_SERVICESTATETYPE} state)
Last Check Time: $(echo "$(( $(date +%s) - $NAGIOS_LASTSERVICECHECK ))s ago")
Check Latency / Duration: ${NAGIOS_SERVICELATENCY} / ${NAGIOS_SERVICEEXECUTIONTIME} seconds
Last State Change: $(echo "$(( $(date +%s) - $NAGIOS_LASTSERVICESTATECHANGE ))s ago")
Last Notification: ${NAGIOS_LONGDATETIME} (notification ${NAGIOS_NOTIFICATIONNUMBER})
Full Output:
$NAGIOS_LONGSERVICEOUTPUT
Notified:
$(format_list ${NAGIOS_NOTIFICATIONRECIPIENTS} | sort -n)
Member of:
$(servicegroup_links ${NAGIOS_SERVICEGROUPNAMES})
----------------------------------------------------------------------
EOT
}
function notify_host_short {
cat <<EOT
${NAGIOS_HOSTSTATE} - ${NAGIOS_HOSTNAME} - "${NAGIOS_HOSTOUTPUT}"
EOT
}
function notify_host_long {
cat <<EOT
${NAGIOS_HOSTSTATE} - ${NAGIOS_HOSTNAME} (${NAGIOS_HOSTALIAS})
Result: "${NAGIOS_HOSTOUTPUT}"
EOT
if [ "${NAGIOS_NOTIFICATIONTYPE}" = "ACKNOWLEDGEMENT" ] ; then
cat <<EOT
----------------------------------------------------------------------
ACKNOWLEDGEMENT
----------------------------------------------------------------------
Author: ${NAGIOS_HOSTACKAUTHOR}
Comment: ${NAGIOS_HOSTACKCOMMENT}
EOT
fi
cat <<EOT
----------------------------------------------------------------------
HOST STATE INFORMATION
----------------------------------------------------------------------
Address: ${NAGIOS_HOSTADDRESS}
Status: ${NAGIOS_HOSTSTATE} (for ${NAGIOS_HOSTDURATION})
Attempt: ${NAGIOS_HOSTATTEMPT}/${NAGIOS_MAXHOSTATTEMPTS} (${NAGIOS_HOSTSTATETYPE} state)
Last Check Time: $(echo "$(( $(date +%s) - $NAGIOS_LASTHOSTCHECK ))s ago")
Check Latency / Duration: ${NAGIOS_HOSTLATENCY} / ${NAGIOS_HOSTEXECUTIONTIME} seconds
Last State Change: $(echo "$(( $(date +%s) - $NAGIOS_LASTHOSTSTATECHANGE ))s ago")
Last Notification: ${NAGIOS_LONGDATETIME} (notification ${NAGIOS_NOTIFICATIONNUMBER})
Full Output:
$NAGIOS_LONGHOSTOUTPUT
Host services:
$NAGIOS_TOTALHOSTSERVICESOK OK
$NAGIOS_TOTALHOSTSERVICESWARNING Warning
$NAGIOS_TOTALHOSTSERVICESUNKNOWN Unknown
$NAGIOS_TOTALHOSTSERVICESCRITICAL Critical
----------
$NAGIOS_TOTALHOSTSERVICES Total
Notified:
$(format_list ${NAGIOS_NOTIFICATIONRECIPIENTS} | sort -n)
Member of:
$(hostgroup_links ${NAGIOS_HOSTGROUPNAMES})
----------------------------------------------------------------------
EOT
}
o_debug=0
o_host=0
o_service=0
o_brief=0
while getopts ":dhsb" opt ; do
case $opt in
d) o_debug=1 ;;
h) o_host=1 ;;
s) o_service=1 ;;
b) o_brief=1 ;;
esac
done
if [ "$o_host" -eq "$o_service" ] ; then
echo "ERROR: -h and -s are mutually exclusive"
exit 1
fi
if [ $o_host -eq 1 ] ; then
[ $o_brief -eq 0 ] && notify_host_long || notify_host_short
fi
if [ $o_service -eq 1 ] ; then
[ $o_brief -eq 0 ] && notify_service_long || notify_service_short
fi
if [ $o_debug -eq 1 ] ; then
cat <<EOT
----------------------------------------------------------------------
DEBUG
--Args----------------------------------------------------------------
$0 $@
\$o_debug = $o_debug
\$o_host = $o_host
\$o_service = $o_service
\$o_brief = $o_brief
--Environment---------------------------------------------------------
$(env | sort -n)
----------------------------------------------------------------------
EOT
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment