Created
October 21, 2011 14:54
-
-
Save jssjr/1304037 to your computer and use it in GitHub Desktop.
Enhanced Nagios Email Notification Script
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
#!/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