Einleitung
Dienst- und Host-Abhängigkeiten sind ein erweitertes Feature von Nagios, dass es erlaubt das Verhalten von Hosts und Diensten in Abhängigkeit vom Status von anderen Hosts oder Diensten zu kontrollieren. In diesem Kapitel wird erklärt, wie Abhängigkeiten funktionieren und was der Unterschied zwischen Host- und Dienst-Abhängigkeiten ist.
Überblick: Dienst-Abhängigkeiten
Das folgende Bild zeigt beispielhaft das logische Layout von Dienst-Abhängigkeiten. Man sollte einiges beachten:
Definition von Dienst-Abhängigkeiten
Als erstes die Grundlagen. Man erstellt Dienst-Abhängigkeiten, indem man Dienst-Abhängigkeits-Definitionen in die Objekt-Konfigurationsdatei(en) hinzufügt. In jeder einzelnen Definition gibt man den abhängigen Dienst, den Dienst auf den man sich bezieht und (falls überhaupt) die Kriterien unter denen Benachrichtigungen und die Überprüfung ausgeführt werden sollen (was später noch detaillierter beschrieben wird).
Man kann mehrere Abhängigkeiten für einen Dienst definieren, muss aber jede Abhängigkeit einzeln definieren.
In dem folgenden Bild wurde - wie folgend beschrieben - eine Abhängigkeit zwischen Dienst F und Host C definiert:
define servicedependency{
host_name Host B
service_description Service D
dependent_host_name Host C
dependent_service_description Service F
execution_failure_criteria o
notification_failure_criteria n
}
define servicedependency{
host_name Host B
service_description Service E
dependent_host_name Host C
dependent_service_description Service F
execution_failure_criteria n
notification_failure_criteria w,u,c
}
define servicedependency{
host_name Host B
service_description Service C
dependent_host_name Host C
dependent_service_description Service F
execution_failure_criteria w
notification_failure_criteria c
}
Wie Dienst-Abhängigkeiten überwacht werden
Bevor Nagios eine Dienst-Überprüfung ausführt oder eine Benachrichtigung für einen Dienst versendet, überprüft das Programm, ob für dieser Dienst irgendeine Abhängigkeit angegeben wurde. Falls keine Abhängigkeit existert werden die Benachrichtigungen versandt. Wurde für den Service eine oder mehr Abhängigkeiten definiert, wird Nagios jede Abhängigkeiten wie folgt untersuchen:
Dieser Zyklus wiederholt sich bis entweder alle Abhängigkeiten für diesen Dienst überprüft wurden oder bis eine Abhängigkeits-Überprüfung fehlschlägt.
*Eine wichtiger Hinweis ist, dass Nagios den aktuellsten "harten" Status des Dienstes benutzt auf den sich der Dienst bezieht, wenn die Abhängigkeiten überprüft werden. Falls Nagios den aktuellsten Status des Dienstes (egal ob harter oder weicher Status) benutzen soll, muss man die soft_service_dependencies-Option aktivieren.
Dienst-Ausführungs Abhängigkeiten
Falls alle der Tests der Ausführungs-Abhängigkeit für den Dienst bestanden haben, wird Nagios
die Überprüfung des Dientes so ausführen, als ob keine Abhängigkeit bestehen würde. Falls nur eine der Ausführungs-Abhängigkeiten
fehlschlägt, unterbindet Nagios temporär die Ausführung der Überprüfung für den abhängigen Dienst.
Zu einem Zeitpunkt in der Zukunft wird die Ausführungs-Abhängigkeit für diesen Dienst bestehen. Wenn dieses
passiert, wird Nagios die Überprüfung des Dienstes ausführen.
Weitere Informationen über die Planung der Überprüfungen findet man hier.
In dem obigen Beispiel würde für Dienst E die Überprüfung der Ausführungs-Abhängigkeit fehlschlagen, wenn sich Dienst B in einem WARNING oder UNKNOWN-Status befindet. Falls dies der Fall ist, wird die Dienst-Überprüfung nicht ausgeführt und die Überprüfung wird für eine (potentielle) erneute Überprüfung zu einem späteren Zeitpunkt neu geplant.
Abhängigkeiten von Dienst-Benachrichtigungen
Falls alle der Tests der Benachrichtigungs-Abhängigkeit für den Dienst bestanden haben, wird Nagios
die Benachrichtigungen für diesen Dientes so aussenden, als ob keine Abhängigkeit bestehen würde. Falls nur
eine der Benachrichtigungs-Abhängigkeiten fehlschlägt, unterbindet Nagios temporär die Ausführung der Benachrichtigungen
für den abhängigen Dienst. Zu einem Zeitpunkt in der Zukunft wird die Benachrichtigungs-Abhängigkeit für diesen
Dienst bestehen. Wenn dieses passiert, wird Nagios die Benachrichtigungen für diesen Dienstes versenden.
Weitere Informationen über die Benachrichtigungs-Logik findet man hier.
In dem obigen Beispiel würde für Dienst F die Überprüfung der Benachrichtigungs-Abhängigkeit fehlschlagen, wenn sich Dienst C in einem CRITICAL- und / oder sich Dienst D in einem WARNING- oder UNKNOWN-Status befindet. Ist dies der Fall, wird die Dienst-Benachrichtigung nicht ausgeführt.
Vererbung von Dienst-Abhängigkeiten
Wie zuvor angemekrt, können Dienst-Benachrichtigungen nicht vererbt werden. In dem obigen Beispiel
sieht man, das Dienst F abhängig ist von Dienst E. Die Abhängigkeit des Dienstes E von Dienst B und Dienst C
wird allerdings nicht auf Dienst F vererbt. Um Dienst F auch von Dienst C abhängig zu machen muss man eine
weiter Dienst-Abhängigkeit definieren. Es gibt keine Abhängigkeits-Definition von Dienst B, deshalb ist
Dienst F nicht abhängig von Dienst B.
In einigen Fällen bedeutet die fehlende Vererbung, dass man einige zusätzliche Abhängigkeits-Definitionen
in der Konfigurationsdatei vornehmen muss, aber dies macht das Feature flexibler. In dem obigen Beispiel
gibt es u.U. einen guten Grund um Dienst F nicht von Dienst B abhängig zu machen. Würden Abhängigkeiten
automatisch vererbt, wäre dies nicht möglich.
Host-Abhängigkeiten
Wie man u.U. schon erwartet, funktionieren Host-Abhängigkeiten in einer ähnlichen Art und Weise wie Dienst-Abhängigkeiten. Der grösste Unterschied ist, dass sie für Hosts und nicht für Dienste gelten. Ein weiter Unterschied ist, dass Host-Abhängigkeiten nur Host-Benachrichtigungen und keine Host-Überprüfungen unterdrücken.
Das folgende Bild zeigt ein Beispiel des logischen Designs von Host-Abhängigkeiten.
In dem obigen Bild würde die Abhängigkeits-Definition für Host C wie folgt aussehen:
define hostdependency{
host_name Host A
dependent_host_name Host C
notification_failure_criteria d
}
define hostdependency{
host_name Host B
dependent_host_name Host C
notification_failure_criteria d,u
}
Wie bei Dienst-Abhängigkeiten werden auch Host-Abhängigkeiten nicht vererbt. In dem Beispiel-Bild kann man sehen, dass Host C nicht die Abhängigkeit von Host B geerbt hat. Damit Host C auch von Host A abhängig ist, muss eine neue Host-Abhängig definiert werden.
Host-Benachrichtigungs-Abhängigekeiten funktionieren ähnlich wie die von Dienst-Abhängigkeiten. Falls alle
der Benachrichtigungs-Abhängigkeits-Tests für diesen Host bestehen, wird Nagios die Benachrichtigungen für diesen
Host so versenden, als ob keine Abhängigkeit bestehen würde. Wenn nur eine Benachrichtigungs-Abhängigkeit für
diesen Host fehlschlägt, unterdrückt Nagios temporär die Versendung von Benachrichtigungen für diesen (abhängigen)
Host. Zu einem Zeitpunkt in der Zukunft wird der Test der Benachrichtigungs-Abhängigkeiten u.U. bestehen. Ist dies
der Fall, wird Nagios sofort die Benachrichtigungen für diesen Host versenden.
Weiter Informationen über die Benachrichtigungs-Logik findet man hier.