Eventhandler
Monitoring ohne einen passenden Eventhandler ist kein Vollständiges Monitoring. Selbstverständliche soll ein Monitoringsystem auch versuchen, mögliche Fehler zu beheben in dem es ein oder mehrmals versucht, das Problem durch einen Neustart eines betroffenen Services zu beheben. Erst wenn dies nicht gelingt wird ein verantwortlicher kontaktiert.
Aus diesem Grund benötigen wir, um das Monitoring abzurunden, einen passendes Eventhandler Script.
Das hier angebotene, verfügt über eine erweiterte Funktionalität. Es ist in der Lage, sagen wir mal zwichen 0300 und 0530 seine Dienste zu unterbrechen. 0300-0530 sind im Script voreingestellt.
############################################################# ## DISABLE EVENTHANDLER BETWEEN TIME_DISABLE AND TIME_ENABLE ## BETWEEN THIS TIMEPERIOD SEND OK PASSIVE CHECKS INTO ## NAGIOS CMD ############################################################# TIME_DISABLE="03:00" TIME_ENABLE="05:30" ## ------------------------------
Hintergrund:
Es gibt Zeiten, in denn man ein System in einen geplanten “Maintanace” Modus versetzen muss um automatisierte Arbeiten zb. durch UC4 durchführen zu lassen. Während dieser Zeit darf ein Prozess nicht neu gestartet werden, da die Automatisierung dadurch in einen undefinierten Zustand gelangen kann. Um dies zu verhindern, bietet Nagios selbst keinen adäquaten Lösungsansatz. Deshalb ist diese Funktionalität in den Eventhandler integriert. Dieser macht aber noch mehr, denn auch wenn er den Service nicht neu starten kann würde der Status nach dem Automatisierungsprozess evtl. ebenso undefiniert sein. Deshalb schickt der Eventhandler anstelle eines restarts nun einen Passivecheck in die nagios CMD und suggeriert so die einwandfreie Funktionalität des Prozesses. Dies macht er bis zum Ablauf der inaktiven Zeitperiode um 0530. Jetzt arbeitet er wieder ganz normal und könnte nun als SOFT 1 ein Problem erkennen und dieses versuchen zu beheben.
## SENDING OK FOR SERVICE TO NAGIOS CMD printf "[%lu] PROCESS_SERVICE_CHECK_RESULT;${HOST};${SERVICE_DESC};${RETURN_CODE};RESETTED BY EVENTHANDLER\n" $( date +%s ) | tee -a $NAGIOS_CMD_SOCKET
Der Eventhandler kann sowohl für nrpe als auch für ssh Aktionen verwendet werden. Dafür muss im Script USE_BINARY entsprechend gesetzt sein. Dies geschieht über die eventhandler_commands.cfg.
## POSSIBLE :: ssh|nrpe" ## WIRD ÜBER DIE commands.cfg FESTGELEGT USE_BINARY="$1"
Um Mails erhalten zu können muss ebenfalls eine passende Mailadresse hinterlegt sein.
CONTACTEMAIL="" In jedem Fall jedoch, protokolliert der Eventhandler jede seiner Aktionen in den Syslog mit dem TAG :: EVENTHANDLER
eventhandler_commands.cfg
define command{ command_name restart_by_nrpe command_line $USER2$/restart_by_eventhandler.sh nrpe $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ "$ARG1$" "$ARG2$" "$ARG3$" "$SERVICEDESC$" ## 1 2 3 4 5 6 7 8 9 } define command{ command_name restart_by_ssh command_line $USER2$/restart_by_eventhandler.sh ssh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ "$ARG1$" "$ARG2$" "$ARG3$" "$SERVICEDESC$" ## 1 2 3 4 5 6 7 8 9 }
USAGE:
USAGE :: restart_by_eventhandler.sh <nrpe|ssh> <CRITICAL> <SOFT|HARD> <2|3> <SERVER> <SERVICE>
Vor dem ersten Einsatz
sind noch folgende paramter im Script auf die eingene Umgebung anzupassen
SSH_BINARY="/usr/bin/ssh" SSH_KEY="/var/lib/nagios/.ssh/id_rsa" SSH_COMMAND="/usr/bin/timeout 10 /usr/bin/sudo /opt/scripts/nagios/plugins/eventhandler/restart.sh" NRPE_BINARY="/usr/lib/nagios/plugins/check_nrpe" NRPE_PORT="5666" NAGIOS_CMD_SOCKET='/var/spool/nagios/nagios.cmd'
Remote Restart Script ( restart.sh )
#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SERVICE="$1" if [ ! ${SERVICE} ]; then echo "NOTHING TO DO. NO SERVICE GIVEN" exit 1 elif [ "${SERVICE}" = "reboot" ]; then sudo /sbin/reboot & else service ${SERVICE} stop sleep 3 ps -ef | grep ${SERVICE} | grep -v grep 2>/dev/null 1>/dev/null if [ $? -eq 0 ]; then /usr/bin/killall -9 ${SERVICE} fi service ${SERVICE} start fi ########################################## ## SPECIAL VALUES ########################################## NAGIOS_TRIGGER="/var/tmp/._event.result" [[ -f ${NAGIOS_TRIGGER} ]] && rm -f ${NAGIOS_TRIGGER}