Überwachung von Dienst- und Host-Clustern


Einleitung

Einige Personen haben gefragt, wie man am besten Cluster von Diensten oder Hosts überwacht. Genau deswegen wurde diese Dokumentation geschrieben. Sie ist ziemlich gradlinig und einfach zu verstehen...

Als erstes sollte man die Bedeutung des Wortes "Cluster" genauer definieren. Der einfachste Weg ist dieses Beispiel: Man nehme an es gibt fünf Hosts welche redundant einen DNS-Dienst zur Verfügung stellen. Falls einer der Dienste ausfällt, ist dies keine grosse Katastrophe, da noch vier Server übrig geblieben sind, die den Dienst weiter aufrecht erhalten. Um den gesamten DNS-Dienst zu überwachen, würde man die fünf DNS-Server einzeln überprüfen. Dies ist was wir unter einem Dienst-Cluster verstehen.
Der Dienst-Cluster besteht aus fünf einzelnen DNS-Diensten, die überwacht werden müssen. Obwohl man jeden Dienst einzeln überwachen kann ist die Frage jedoch, welcher Gesamt-Status für den DNS-Dienst-Cluster vorliegt und nicht der jedes einzelnen Dientes.

Gibt es eine Gruppe von Hosts die eine Hochverfügbarkeits-Lösung (clustering) zur Verfügung stellen, redet man von einem Host-Cluster. Falls ein einzelner Host ausfällt, übernimmt ein anderer Server um all die Aufgaben des ausgefallenen Servers zu übernehmen. Als eine Seitenbemerkung sollte man sich das High-Availability Linux Project für weitere Informationen für Host- und Dienst-Redundanz unter Linux anschauen.

Herangehensweise

Es gibt verschiedene Herangehensweisen um Dienst- oder Host-Cluster zu überwachen. Hier werden die einfachsten Methoden beschrieben. Die Überwachung von Dienst- oder Host-Clustern beinhaltet zwei Dinge:

Die Überwachung individueller Host- oder Dienst-Cluster-Elemente sind einfach. Wahrscheinlich wird dies sowieso bereits getan. Für Dienst-Cluster sollte man nur sicherstellen, dass man jedes einzelne Element des Clusters überwacht. Falls man also einen Cluster von fünf DNS-Servern betreibt, sollte man sicherstellen, dass fünf seperate Dienste-Überprüfungen (wahrscheinlich über das check_dns-Plugin) definiert wurden.
Für Host-Cluster muss man für jedes Mitglied des Clusters eine einzelne Host-Definition vornehmen (man muss allerdings mindestens einen Dienst für jeden einzelnen überwachten Host definieren).
Wichtig:
Vielleicht wollen Sie die Benachrichtigungen für die einzelnen Cluster-Elemente (Host- oder Dienst-Definition) deaktivieren. Auch wenn man keine Benachrichtigung über den Status der einzelnen Elemente erhält, bekommt man doch in dem Status-CGI eine visuelle Anzeige der einzelnen Host- oder Dienst-Stati. Dies kann z.B. nützlich sein, um in Zukunft die Quelle eines Problems innerhalb des Clusters zu analysieren.

Man kann den gesamten Cluster überwachen, indem man z.B. vorher zwischengespeicherten Ergebnisse der Cluster-Elemente benutzt. Man kann natürlich alle Elemente des Clusters erneut überprüfen, um den aktuellen Status des Clusters herauszufinden, aber warum Bandbreite und Ressourcen verschwenden, wenn die Ergebnisse bereits zwischengespeichert vorliegen.
Wo werden die Ergebnisse zwischengespeichert?
Die zwischengespeicherten Ergebnisse der Cluster-Elemente kann man in der Status-Datei finden (vorrausgesetzt man überwacht auch jedes einzelne Element). Das check_cluster-Plugin wurde entwickelt um die zwischengespeicherten Ergebnisse der Host- und Dienst-Stati aus der Status-Datei auszulesen.
Wichtig:
Obwohl die Benachrichtigungen für die individuellen Elemente des Clusters nicht aktiviert wurden, sollte man aber die Benachrichtigungen für den Gesamt-Cluster-Status aktivieren.

Die Benutzung des check_cluster-Plugin

Das check_cluster-Plugin wurde entwickelt um den Gesamt-Status eines Host- oder Dienst-Clusters zu überwachen. Es funktioniert, indem es die zwischengespeicherten Ergebnisse der Überwachung der einzelnen Host- oder Cluster-Elemente aus der Status-Datei analysiert.

Später mehr... Das check_cluster-Plugin kann derzeit von http://www.nagios.org/download/alpha bezogen werden.

Überwachung eines Dienst-Clusters

Als erstes muss man einen neuen Dienst zur Überwachung des Dienst-Clusters definieren. Dieser Dienst wird die Überprüfung des Gesamt-Status des Clusters übernehmen. Für diesen Dienst sollte die Benachrichtigung aktiviert sein, da die Administratoren ja informiert werden müssen, wenn ein Problem mit dem vom Cluster zur Verfügung gestellten Dienst vorliegt. Der Status eines einzelnen Dienstes eines Mitglieds des Clusters interessiert vielleicht nicht, daher kann man für diese die Benachrichtigungen durchaus deaktivieren.

Okay, man nehme an es wurde - wie folgt - ein check_service_cluster-Befehl definiert:

define command{
	command_name	check_service_cluster
	command_line	/usr/local/nagios/libexec/check_cluster --service /usr/local/nagios/var/status.log $ARG1$ $ARG2$ < $ARG3$
	}

Wir nehmen an, es gibt fünf Dienste die Mitflied des Dienst-Clusters sind. Falls Nagios eine Warnung versenden soll, wenn zwei oder mehr Dienste in dem Cluster ausgefallen sind und einen kritischen Status versendet, wenn sich drei oder mehr Dienste in einem nicht-OK-Status befinden, muss man sollte der <check_command>-Befehl des definierten Cluster-Dienstes wie folgt aussehen: this:

check_service_cluster!2!3!/usr/local/nagios/etc/servicecluster.cfg

Das $ARG3$-Makro wird durch /usr/local/nagios/etc/servicecluster.cfg ersetzt, wenn die Überprüfung ausgeführt wird. Da das check_cluster-Plugin aus dieser Datei die Namen der Cluster-Mitglieder liest, muss man diese Datei erstellen und pro Zeile einen Dienst angeben, der Mitglied des Clusters ist.
Das Format jedes Dienst-Eintrages besteht zum einen aus dem Kurznamen des Hosts mit dem der einzelne Dienst verknüpft ist und zum anderen - getrennt durch ein Semikolon - die Dienst-Beschreibung. Ein Beispiel dieser Datei:

host1;DNS Service
host2;DNS Service
host3;DNS Service
host4;DNS Service
host5;DNS Service
host6;DNS Service

Überwachung von Host-Clustern

Die Überwachung von Host-Clustern ist sehr ähnlich der Überwachung von Dienst-Clustern. Der Unterschied besteht hauptsächlich darin, dass die Cluster-Mitglieder Hosts und nicht Dienste sind. Um den Status des Host-Clusters zu überwachen, nutzt man das check_cluster-Plugin. Der Dienst sollte nicht mit einem der Mitglieds-Hosts aus dem Cluster verknüpft werden, da dies eine Benachrichtigung verursacht, auch wenn nur der eine Host ausgefallen ist. Es ist vielleicht eine gute Idee, den Dienst mit dem Host zu verknüpfen, auf dem Nagios läuft. Falls der Host auf dem Nagios läuft ausfällt, läuft Nagios auch nicht mehr, so das überhaupt keine Überwachung vorgenommen wird (ausser es wurde eine redundantes Überwachungs-Setup aufgebaut).

Wie nehmen an, dass der folgende check_host_cluster-Befehl definiert wurde:

define command{
	command_name	check_host_cluster
	command_line	/usr/local/nagios/libexec/check_cluster --host $ARG1$ $ARG2$ /usr/local/nagios/var/status.log < $ARG3$
	}

Nehmen wir an es gibt sechs Hosts die Mitglied des Clusters sind. Falls Nagios einen warnenden Status versenden soll, wenn zwei oder mehr Hosts im Cluster ausfallen oder einen kritischen Status Status ausgeben soll, wenn vier oder mehr Hosts ausgefallen sind, muss der entsprechende <check_command>-Befehl wie folgt konfiguriert werden:

check_host_cluster!2!4!/usr/local/nagios/etc/hostcluster.cfg

Das $ARG3$-Makro wird durch /usr/local/nagios/etc/hostcluster.cfg ersetzt, wenn die Überprüfung ausgeführt wird. Da das check_cluster-Plugin aus dieser Datei die Namen der Cluster-Mitglieder liest, muss man diese Datei erstellen und pro Zeile den Kurznamen jedes Hosts (wie in der Host-Definition angegeben), der Mitglied des Clusters ist, eintragen.
Ein Beispiel dieser Datei:

host1
host2
host3
host4
host5
host6

Das wars! Nagios überprüft periodisch den Status des Host-Clusters und sendet eine Benachrichtigung wenn sich der entsprechende Status negativ verändert (angenommen es wurde die Benachrichtigung für diesen Dienst aktiviert). Man beachte das man u.U. die Benachrichtigung für die einzelnen Cluster-Mitglieder in den entsprechenden Host-Definitionen deaktivieren will, wenn ein einzelner Host ausfällt. Erinnern Sie sich, dass der Status der einzelnen Hosts nicht so sehr interessieren, wie der Gesamt-Status des Clusters. Abhängig vom Netzwerk-Layout sollte man aber evtl. die Benachrichtigungen für unerreichbare Hosts in den Host-Definitionen aktiviert lassen.