Tutorial: Querx und Icinga 2
Serverraumüberwachung mit dem Open-Source Monitoring-System
Nachdem Icinga als Fork der Open-Source Monitoring-Lösung Nagios zunächst das Ziel verfolgte, einige der althergebrachten Schwächen und Fehler des Monitoring-Urgesteins zu überwinden, entstand mit Icinga 2 ein komplett eigenständiges System. Icinga 2 ist nebenläufig, unterstützt verteiltes Monitoring und bietet weiterhin Unterstützung für die Monitoring-Plugins. Hat man sich einmal an die Konfiguration gewöhnt, erhält man mit Icinga 2 einen mächtigen Werkzeugkasten für Überwachungsaufgaben.
Anders als etwa bei Paessler PRTG oder Zabbix , wird Icinga 2 nicht über die Weboberfläche konfiguriert, sondern über Textdateien. Um diese Textdateien sinnvoll aufzubauen, ist von Anfang an ein wenig grundlegendes Verständnis von Icinga 2 notwendig.
Teil 1: Das Open-Source Monitoring-System Icinga 2
Hosts und Services
Icinga 2 überwacht die Zustände verschiedener Hosts und der von diesen angebotenen Services. Im nachfolgenden Beispiel ist der Host ein "Linux-Server", die angebotenen Dienste sind „freier Speicherplatz", "monatliches Datenvolumen" und "letztes durchgeführtes Update". Jeder Host kann die Zustände UP und DOWN annehmen, jeder Service die Zustände OKAY, WARNING, CRITICAL und UKNOWN.
Ein Service kann weiterhin Performance-Daten, beispielsweise „4GB“ für „freien Speicherplatz" oder „01.05.2017" für „Letztes Update“ übermitteln, sowie textuelle Informationen in variierender Ausführlichkeit.

Das Frontend: Icingaweb 2
Das Standard Frontend für Icinga 2 ist Icingaweb 2. Hier werden die eingerichteten Hosts und Services zusammen mit den Zustands- und Performance-Informationen angezeigt, bearbeitet und kommentiert.
(1) Zwei Hosts in der Hostgruppe „Querx sensors“ haben den Status UP
(2) Ein Service auf einem „Linux-Server“ hat den Status WARNING
(3) Ein Service auf einem „Querx Sensor“ hat den Status CRITICAL
(4) Zwei Services auf einem Querx Sensor haben den Status OKAY
Woher kommt der Status? CheckCommands und Plugins
Um einen Service abzufragen, führt Icinga 2 ein CheckCommand aus. Ein solches CheckCommand wiederum ruft ein Plugin auf, welches die eigentliche Überprüfung durchführt.
Die Überprüfung eines Hosts erfolgt über das CheckCommand hostalive. Diese ruft das Plugin check_ping4 auf. Reagiert der Host innerhalb eines gewissen Zeitfensters, wird der Status UP zurückgegeben. Reagiert er nicht, gibt es den Status DOWN zurück.
Ein Plugin ist ein eigenständiges Programm, das Icinga 2 über seinen Exit-Code den Status des zugeordneten Dienstes und über seine Ausgaben textuelle Informationen und Performance-Daten übergibt.
Exit-Code | Service-Status |
0 | OKAY |
1 | WARNING |
2 | CRITICAL |
3 | UNKNOWN |
Gibt ein Plugin Performance-Daten aus, werden diese durch ein Pipe-Zeichen von der textuellen Ausgabe getrennt. Die von dem Plugin zurückgegebenen Werte werden von Icinga 2 interpretiert.
(1) Der Sensorstatus ist kritisch (Exit-Code: 2)
(2) Die Ausgabe des Plugins.
(3) Die interpretierten und angezeigten Performance-Daten.
Merken
Beispiel: Plugin mit knapper Ausgabe (NORMAL)
$ ./plugin OKAY – Temperatur im normalen Bereich | 25.00 $ echo $? 0 $ |
Dies ist ein sehr grundlegendes Beispiel. Das Plugin wird mit dem Befehl ./plugin augerufen. Die textuelle Ausgabe ist OKAY – Temperatur im normalen Bereich. Als Performance-Datum wird der Wert 25.00 übergeben.
Der Befehl echo $? gibt wird der Exit-Code des letzen ausgeführten Programmes, also des Plugins, zurück. Dieser ist 0.
Beispiel: Plugin mit ausführlicher Ausgabe (CRITICAL)
$./plugin -v |
Auch dieses Beispiel wird durch ./plugin aufgerufen. Die Option -v (verbose) bewirkt, dass die Ausgabe weitere Informationen enthält, nämlich den Status, eine Statusnachricht, die Laufzeit und den Standort des Temperatursensors.
Auch die Performance-Daten sind jetzt ausführlicher: Neben dem gegenwärtigen Messwert für Temperatur enthalten die auch die zulässigen Maximal- und Minimalwerte.
Der Exit-Code dieses Plugins ist 2, also CRITICAL. Das liegt daran, dass der Messwert von 23.4°C außerhalb des Fensters von 25.00°C bis 35.00°C liegt.
TEIL 2: Serverraumüberwachung mit Icinga 2 und Querx
Überblick
Im folgenden Abschnitt wird eine Bespielkonfiguration für Icinga2 aufgesetzt, die Querx TH unterstützt. Die Konfigurationsdateien stellen Templates, CheckCommand und Service-Definitionen für verschiedene Querx-Devices bereit. Diese Dateien werden wir bei Einführung neuer Sensoren auf aktuellem Stand halten und im Download-Bereich bereitstellen. Dieses Tutorial geht einmal exemplarisch durch die gesamte Konfiguration um individuelle Anpassungen zu ermöglichen.
Für die Einbindung in Icinga2 ohne weitergehende Konfiguration können die Schritte 2-4 übersprungen werden.
(1) In einem ersten Schritt wird das Plugin check-querx installiert, über welches Icinga2 die notwendigen Anfragen an das Gerät stellt.
(2) Dazu wird in einem zweiten Schritt ein CheckCommand konfiguriert, welches Icinga2 mitteilt, wie es das Plugin aufzurufen hat.
(3) Im dritten Schritt werden Templates für unterschiedliche Querx-Geräte angelegt. Diese Templates werden dazu genutzt um verschiedene Querx-Sensoren als Hosts anzulegen. Anschließend werden alle Querxe zusammen in einer Host-Group gruppiert.
(4) In Schritt vier werden die Services, also Temperatur, Luftfeuchtigkeit und Taupunkt definiert.
(5) In Schritt fünf werden die Hosts konfiguriert, also die vorhandenen Querxe eingebunden.
In einem weiteren Tutorial werden wir in einigen Wochen (6) Benutzer, Alarmbenachrichitungen sowie die Benachrichtigungseslakation und den (7) SMS-Versand beschreiben.
Grundlegendes zur Konfiguration von Icinga2
In Verlauf dieses Tutorials werden die Icinga2-Konfiguration für Querx im Verzeichnis
/etc/icinga2/conf.d/querx
angelegt.
Auf diese Art wird die Konfiguration automatisch in Icinga2 eingebunden. Wenn Sie die Konfiguration in einem anderen Verzeichnis anlegen und verwalten wollen,
müssen Sie die Datei /etc/icinga2/icinga2.conf anpassen und das entsprechende Verzeichnis mit dem Befehl import_recursive "
Wenn Sie Konfiguration in das Verzeichnis /etc/icinga2/querx.conf.d legen möchten, können Sie folgende Befehle ausführen:
$ cp /etc/icinga2/icinga2.conf /etc/icinga2/icinga2.conf.old |
Schritt 1: Herunterladen von Plugin und Konfiguration
Laden Sie die Konfigurationsdateien-Dateien für Icinga2 herunter. Wenn Sie die detailierte Besprechung überspringen möchten, können Sie diese direkt in das Verzeichnis /etc/icinga2/conf.d/querx kopieren und anpassen.
Laden Sie jetzt das für Ihr Betriebssystem richtige Querx-Plugin herunter.
Wenn Sie ein anderes Betriebssystem verwenden, können Sie sich das Plugin der Programmiersprache Go selber kompilieren.
Die notwendigen Quellen finden finden Sie unter www.github.com/egnite/querxnagios.
Kopieren Sie das Plugin in den Plugin-Ordner, z.B. nach /usr/lib/nagios/plugins. Überprüfen Sie jetzt die korrekte Funktion.
$ cd /usr/lib/nagios/plugins |
Dieser Befehl überprüft, ob sich der Temperatursensor (-s0) des Querx mit der IP-Adresse 192.168.1.101 (-H) im Bereich zwischen 10 und 20°C befindet (-c10:20).
Wenn sie diese oder eine ähnliche Ausgabe erhalten, funktioniert das Plugin korrekt.
Schritt 2: Anlegen der CheckCommands
Legen Sie zunächst den Ordner /etc/icinga2/conf.d/querx an und erzeugen Sie darin die Datei commands.conf.
$ mkdir /etc/icinga2/conf.d/querx |
Bearbeiten Sie die Datei anschließend mit einem Editor.
template CheckCommand "querx-check"{ object CheckCommand "querx-temperature"{ object CheckCommand "querx-humidity"{ object CheckCommand "querx-dew-point"{ |
Zunächst wird ein Template für das CheckCommand angelegt, welches selbst wiederum ein Template, nämlich plugin-check-command importiert.
Dieses Template konfiguriert ganz allgemein die Parameter, die an das check_querx-Plugin übergeben werden.
Für jeden Service, den Querx bereitstellt, definieren wir dann ein eigenes CheckCommand, das jeweils "querx_check" importiert:
querx-temperature, querx-humidity und querx-dew-point. Innerhalb dieser Kommandos wird die Variable vars.sensorid gesetzt,
die dem check_querx-Plugin mitteilt, welcher Sensor abgefragt werden soll. Außerdem werden hier die Hostvariablen
*_warning und *_critical als Übergabeparameter festgelegt.
$ service icinga2 checkconfig |
Schritt 3: Templates für verschiedene Querx-Modelle anlegen
Legen Sie jetzt die Datei templates.conf an
$ touch /etc/icinga2/conf.d/querx/templates.conf |
Bearbeiten Sie die Datei anschließend mit einem Editor.
template Host "querx-th" { template Host "querx-pt" { |
Mit Hilfe dieser Templates wird später spezfiziert, welchen Querx Sie einsetzen. Wenn Sie einen Host anlegen, können Sie einfach das entsprechende Host-Template importieren und damit die beiden Variablen host.vars.device und host.vars.querxtype setzen. Über diese Variablen erfolgt später die Zuordnung von Services und Hostgruppen.
Speichern Sie die Änderungen und überprüfen Sie, ob sie keinen Fehler bei der Eingabe gemacht haben.
$ service icinga2 checkconfig |
Schritt 4: Service-Definitionen anlegen
Die Datei services.conf enthält die Service-Beschreibungen für die verschiedenen Querx-Modelle.
$ touch /etc/icinga2/conf.d/querx/services.conf |
Bearbeiten Sie die Datei anschließend mit einem Editor.
apply Service "temperature" { apply Service "humidity" { apply Service "dew-point" { |
Jede dieser Service-Definitionen importiert zunächst das Service-Template "generic-service".
Anschließend wird eines der drei CheckCommands aus Schritt 2 angegeben. Der Parameter display_name setzt die angezeigte Service-Bezeichnung, beispielsweise im Webinterface.
Ein bisschen Magie passiert in den "assign where" - Zeilen. Hier werden die Service-Definitionen denjenigen Hosts zugewiesen, die die Variable host.vars.querxtype gesetzt haben. Aus dem letzten Schritt wissen Sie, dass das über die Einbindung eines Querx-Templates geschieht.
Auch an dieser Stelle:
$ service icinga2 checkconfig |
Schritt 5: Host anlegen oder Querx in Icinga 2 einbinden.
Die Datei hosts.conf enthält die Hosts, die überwacht werden sollen - also die tatsächlichen Querxe.
$ touch /etc/icinga2/conf.d/querx/hosts.conf |
Bearbeiten Sie die Datei jetzt mit einem Editor.
object Host "querx-serverraum"{ object Host "querx-solaranlage"{ |
Hier werden zwei Querxe konfiguriert. Ein Querx TH mit der IP-Adresse 192.168.2.101, der Temperatur, Luftfeuchtigkeit und Taupunkt im Serverraum überwacht, sowie ein Querx PT100 mit der IP-Adresse 192.168.2.102, der die Vorlauftemperatur einer Solaranlage überwacht.
HINWEIS: Die Variablen t_critical und t_warning für Temperatur, h_critical und h_warning für Luftfeuchtigkeit sowie d_critical und d_warning für den Taupunkt werden im Range-Format angegeben und sind optional. Wenn kein kritischer Wert übergeben wird, werden automatisch die Alarmgrenzen von Querx übernommen.
Überprüfen Sie nach dem Speichern ein weiteres Mal, das die Konfiguration weiterhin korrekt ist.
$ service icinga2 checkconfig |
In der Datei groups.conf werden abschließend noch ein paar Regeln eingetragen, wie die Querxe im Web-Interface gruppiert werden sollen:
$ touch /etc/icinga2/conf.d/querx/groups.conf |
object HostGroup "querx-sensors" { object HostGroup "querx-pt-sensors" { object HostGroup "querx-th-sensors" { |
Die Parameterbenennung sollte Ihnen von den Service-Definitionen her bereits vertraut sein. Wie üblich überprüfen Sie bitte, dass Sie keinen Fehler bei der Konfiguration gemacht haben.
$ service icinga2 checkconfig |
Wenn alles in Ordnung ist, laden Sie die Konfiguration jetzt neu.
$ service icinga2 reload |
Gruppen konfigureren und Konfiguration neu laden
In der Datei groups.conf werden abschließend noch ein paar Regeln eingetragen, wie die Querxe im Web-Interface gruppiert werden sollen:
$ touch /etc/icinga2/conf.d/querx/groups.conf |
object HostGroup "querx-sensors" { object HostGroup "querx-pt-sensors" { object HostGroup "querx-th-sensors" { |
Die Parameterbenennung sollte Ihnen von den Service-Definitionen her bereits vertraut sein. Wie üblich überprüfen Sie bitte, dass Sie keinen Fehler bei der Konfiguration gemacht haben.
$ service icinga2 checkconfig |
Wenn alles in Ordnung ist, laden Sie die Konfiguration jetzt neu.
$ service icinga2 reload |