====== Nagios mit dynamischem Check-Intervall ====== Nagios checkt normalerweise die Services und Hosts in festen Intervallen. Dabei können Services und Hosts zwei Status annehmen, "SOFT state" und "HARD state". Sobald Nagios eine Status-Änderung feststellt, wird der Check in einen "SOFT state" gesetzt. In der Nagios-Config ist dann festgelegt, nach wie vielen Wiederholungen aus diesem "SOFT state" dann ein "HARD state" wird. Beispiel: define service{ host_name A Host service_description A Service normal_check_interval 5 retry_check_interval 1 max_check_attempts 5 } Zur Verdeutlichung: {{:wiki:nagios_v2.png?350 |Schematische Darstellung}} Der Service ist also zunächst im "HARD state", bis Nagios eine Änderung feststellt und diesen in den "SOFT state" setzt. Nun kommen die Parameter ''max_check_attempts'' und ''retry_check_interval'' zum Tragen um den neuen Status zu bestätigen. Im o.g. Beispiel ändert Nagios nun den Check-Interval vom 5-Minuten-Rhythmus (''normal_check_interval'') auf einen minütlichen Rhythmus (''retry_check_interval''). Sobald der neue Status oft genug bestätigt wurde (''max_check_attempts''), also in unserem Beispiel nach beim 5ten Mal, wird aus dem "SOFT state" ein sogenannter "HARD state". Ab jetzt gilt dann wieder der ''normal_check_interval'', also hier 5 Minuten. ==== Problemstellung ==== Der oben beschriebene Weg bis zur Feststellung eines Problems funktioniert wie gewünscht und kann über die Konfiguration gut den Gegebenheiten im Unternehmen (z.B. SLAs) angepasst werden. Gerade wenn man aber Nagios auch für ein SLA-Reporting benutzen will, hat man ein Problem beim Weg "heraus" aus der Fehlersituation. Hat Nagios nun wie oben beschrieben die Fehlersituation festgestellt und als "HARD state" bestätigt, wird ja üblicherweise alarmiert und das Problem hoffentlich schnell beseitigt. Bis Nagios das Ende dieser "Downtime" nun feststellt, läuft jetzt aber der ''normal_check_interval'' und so werden in unserem Beispiel möglicherweise 4 Minuten zusätzlicher "Downtime" protokolliert, wenn z.B. eine Minute nach dem letzten Nagios-Check das Problem beseitigt wurde. Noch gravierender für die Statistik wird's, wenn der ''normal_check_interval'' z.B. auf 15 Minuten hochgesetzt wird. ==== Lösung ==== Nagios wird quasi "zur Laufzeit" durch ein EventHandler Skript umkonfiguriert, so dass bei einem Service-Fehler der ''normal_check_interval'' auf 1 Minute herabgesetzt wird. Kehrt dieser Service wieder zu ''OK'' zurück, wird auch der Interval wieder auf 5 Minuten "hochgedreht". Hierzu werden folgende Schritte notwendig: 1. Anlegen des EventHandler Skript: #!/bin/bash now=`date +%s` commandfile='/var/nagios/rw/nagios.cmd' case "$1" in OK) /usr/bin/printf "[%lu] CHANGE_NORMAL_SVC_CHECK_INTERVAL;$2;$3;5\n" $now > $commandfile ;; WARNING) /usr/bin/printf "[%lu] CHANGE_NORMAL_SVC_CHECK_INTERVAL;$2;$3;1\n" $now > $commandfile ;; UNKNOWN) ;; CRITICAL) /usr/bin/printf "[%lu] CHANGE_NORMAL_SVC_CHECK_INTERVAL;$2;$3;1\n" $now > $commandfile ;; esac exit 0 2. Definieren eines Commands define command { command_name change_check_interval command_line $USER1$/eventhandlers/change_check_interval.sh $SERVIC ESTATE$ $HOSTNAME$ $SERVICEDESC$ } 3. Definieren des Eventhandlers am Service define service{ use generic-service host_name nagiostest service_description HTTP check_command check_http!-H 127.0.0.1 -s "Welcome" event_handler change_check_interval # <-- } ====Quellen==== * http://serverfault.com/questions/308802/dynamically-setting-a-new-test-interval-for-nagios-checks * http://www.1337geek.co.uk/tag/change-nagios-check-intervals-dynamicaly/