Icinga/Nagios Checks zu IPSymcon Daten via JSON API

Einsatz:

Nutzung der Datenbasis von Symcon mittels Plugin für die verbreitenen Monitoring Frameworks Icinga/Nagios. Diese weit verbreiteten OpenSource Frameworks wurden primär für die Überwachung von Computern und den darauf laufenden Diensten entwickelt. Mittels einfacher Scripte (so genannter Plugins) ist es möglich, Daten zu jedem denkbaren Prozess zu sammeln, auf Fehlerzustände zu untersuchen, mit anderen Daten zu verknüpfen und übersichtlich darzustellen. Damit ist auch der Einsatz solcher professionellen Werkzeuge in der immer mehr wachsenden privaten IT-Landschaft ein interessantes Thema.

Ich beziehe mich hier auf Icinga, da ich es selber einsetze und für die bessere Alternative halte. Das Plugin-Konzept und die Konfiguration ist bei beiden Frameworks ähnlich.

Ein Plugin-Script gibt an das Framework über den Return Code die Zustände "OK","WARNING","CRITICAL" oder "UNKNOWN" sowie optional über STDOUT eine Meldung und "Performancedaten" zurück (siehe Plugin API). Man kann Prüfungen auf Schwellwerte (für Warnungen oder kritische Zustände) integrieren und damit den zurückgegebenen Zustand definieren. Der zurückgegebene Zustand ist die Basis für Darstellung im Framework und Notifikationen. Man kann an diese Zustände auch "Eventhandler" binden,die dann selbstständig Aktionen ausführen können.

Funktion:

Der folgende Text bezieht sich auf die Nutzung der JSON-API, welche ab IPsycon V3.0 verfügbar ist.

Vom Icinga/Nagios Framework wird ein Plugin im Rahmen eines "Checks" in konfigurierbaren Abständen (check_interval) ausgeführt. Zum Auslesen der IPS-Variablen wird dabei eine Verbindung über das Netzwerk zum IPS-Server aufgebaut und Daten über die JSON API ausgetauscht. So ist es möglich, das IPSymcon unter Windows läuft, der Icinga Service aber unter Unix.

Über diese Verbindung wird mittels der ID einer Variable das zugehörige Variablenobjekt abgefragt, welches neben dem eigentlichen Wert auch noch Informationen zum Typ , letzte Aktualisierung und mehr enthält. Mit einem zusätzlichen Zugriff auf den Objektmanager und des Variablenprofiles kann auch der Name der Variable und der Anzeige-Suffix ausgelesen werden. Als Grundgerüst zur Abfrage des IPSymcon-Servers wird dabei eine Klasse (PHP bzw Perlmodul) zur Kapselung der nativen IPSymcon-Befehle mit Hilfe der JSON-API eingesetzt.

Die IPS-Daten müssen noch aufgearbeitet werden. So werden ein passender Return Code ("UNKNOWN" für Fehler bzw "OK") sowie auf STDOUT das Ergebnis in Textform zurück gegeben. Für spätere Auswertungen werden die ausgelesenen Werte auch als "Performancedaten" übergeben. Diese Daten können in eine Datenbank geschrieben werden oder z.B. mit PNP in Icinga Web visualisiert werden.

Installation und Konfiguration

Auf dem Monitoring Server muss neben der lauffähigen Icinga Installation für PHP-basierte Checks die Json- und Mbstring-Extensions installiert sein. Die Perl-Scripte benötigen die Standard REST::Client, MIME::Base64 und Json-Module sowie den IPS-Json Wrapper sowie deren Abhängigkeiten.

Aufruf:
./check_ips_json.pl -h
./check_ips_json.pl  [-h] | -i <VariableID>  [-c <critical level>(absolute)] [-w <warning level>(absolute)] [-f <config_file>]|[-H <IPSHOST> -P <IPS_APIPORT> [-a <maxage in sec > ] [-u <apiuser>] [-p <apipassword>]

./check_ips_json.php -h
Usage: check_ips_json.php [-h]  -i <Variable ID> [-c <critical level>(absolute)] [-w <warning level>(absolute)] [-f <config_file>|-H <ipshost> -P <port> -u <apiuser> -p <api_password>]

z.B. mit IPS_JSON_config.cfg im gleichen Verzeichnis
 ./check_ips_json.pl -i 43491
OK - HMS_Temperatur_2:-17.7 °C, Age=285s |HMS_Temperatur_2=-17.7;;;;

erweitertes Beispiel

Für eine genauere Steuerung der Abläufe und Rückgabewerte habe ich das Script etwas abgewandelt,um es als Basis für alle Abfragen von IPS-Variablen einsetzen zu können. Hier wird der ausgelesene Wert und das Alter des Wertes über STDOUT an ein übergeordnete Script gegeben. Die Formatierung und endgültige Zustandsbewertung wird dort gemacht. Beispielhaft habe ich meine Konfiguration und Pluginscripte für die Abfrage eines Temperatur/Feuchtesensors sowie eines Energiemessgerätes bereitgestellt. Die Scripte befinden sich im Samples Downloadfile.

Icinga Temperatur Check
Darstellung des IPS Temperatur-Sensors

Icinga Energy Check
Darstellung des IPS Energy-Sensors

Weitere Anwendungen der JSON-API

Durch den universellen Charakter der JSON API muss die Anbindung an IPS keine Einbahnstrassse sein. Auch das Ansteuern von Aktoren oder das Ausführen von IPSymcon-Scripten ist möglich. Im Download sind auch dafür Beispiele enthalten.

Index
Disclaimer

© 2011+ Thomas Dreßler
Alle Rechte vorbehalten
letzte Änderung 04.01.2022