Host- und Dienst-Abhängigkeiten


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:

  1. Ein Dienst kann von einem oder mehreren anderen Dienstes abhängig sein
  2. Ein Dienst kann von Diensten abhängig sein, die nicht mit dem gleichen Host verknüpft sind
  3. Dienst-Abhängigkeiten sind nicht vererbbar
  4. Dienst-Abhängigkeiten können genutzt werden, um die Ausführung von Event Handlern oder Benachrichtigungen unter bestimmten Umständen (OK-, WARNING-, UNKNOWN- und / oder CRITICAL-Status) zu unterdrücken

Dienst-Anhängigkeiten

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:

  1. Nagios erhält den aktuellen Status * des Dienstes, von dem der definiert Dienst abhängig ist.
  2. Nagios vergleicht den aktuellen Status des Dienstes von dem er abhängig ist mit den in der Abhängigkeits-Definition angegebenen Status-Optionen (ob der aktuelle Status relevant ist, oder nicht).
  3. Falls der aktuelle Status des Dienstes von dem er abhängt mit einem der in der Abhängigkeits-Definition angegebenen Status-Optionen übereinstimmt, ist die Abhängigkeit fehlgeschlagen und Nagios beendet die Schleife zur Abhängigkeits-Überprüfung.
  4. Falls der aktuelle Status des Dienstes von dem er abhängt nicht mit einem der in der Abhängigkeits-Definition angegebenen Status-Optionen übereinstimmt, hat die Abhängigkeit bestanden und Nagios wird den nächsten Abhängigkeits-Eintrag überprüfen.

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.

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.