openHAB :: Kleines Netzwerkmonitoring

openhabnmUm einen Vortragenden der letzten OpenRheinRuhr zu zitieren: „Einen Dienst, den man nicht überwacht, braucht man nicht„. Für die Überwachung von Servern, Netzwerkkomponenten und einzelnen Diensten gibt es zahlreiche, teilweise sogar quelloffene und kostenlose Produkte auf dem Markt. Für eine heimische Diagnose, warum das Internet mal wieder „kaputt“ ist, reichen jedoch ein paar lokale Scripte und eine Anzeige der Stati in openHAB. Nennen wir es einfach „Netzwerk-Monitoring des kleinen Admins“.

Verfügbare Artikel zu openHAB

little_blue_dot Einleitunglittle_blue_dot Einbinden der Internetgeschwindigkeitlittle_blue_dot RFID-Lesegerät einbinden
little_blue_dot Installationlittle_blue_dot Präsenzerkennung via Bluetooth und Pinglittle_blue_dot Einbinden von DS18B20-Sensoren
little_blue_dot Konfigurationlittle_blue_dot Kleines Netzwerkmonitoringlittle_blue_dot ical-Abfallkalender einbinden
little_blue_dot Reverse-Proxy für OpenHABlittle_blue_dot Einbinden von LG-Fernsehern [Update]little_blue_dot openHAB als Wecker
little_blue_dot Datenspeicherung und Statistikenlittle_blue_dot Einbinden Schaltern und Kontaktenlittle_blue_dot Einbinden von Bewegungssensoren
little_blue_dot Regeln planen und konfigurierenlittle_blue_dot Einbinden von Funksteckdosen (433 MHz)little_blue_dot Einbinden einer FritzBox
little_blue_dot Einbinden von USB-Steckdosenleisten (SIS-PMS)little_blue_dot Infrarotgesteuerte Geräte einbindenlittle_blue_dot Sprachausgabe auf einem Raspberry
little_blue_dot Einbinden von Temperatursensorenlittle_blue_dot Steuerung mit NFC-Tagslittle_blue_dot Schaltbare Steckdosenleiste mit Relais
little_blue_dot Externer Zugriff mit my.openhab

 

 

Scripte erstellen

Für fast jede Überprüfungsart werden wir ein separates Script erstellen, dass unser gewünschtes Ziel bzw. einen Dienst auf seine Erreichbarkeit/Funktion prüft. Die Scripte erstellen wir auf dem Server, auf dem auch openHAB ausgeführt wird.

 

Überwachung von DNS-Servern

Falls wir einen eigenen DNS-Server bzw. DNS-Cache betreiben, möchten wir gerne prüfen, ob dieser seine Dienste ordnungsgemäß verrichtet. Hierfür haben wir mehrere Möglichkeiten. Wir könnten die Erreichbarkeit des Servers mittels „Ping“ prüfen. Jedoch könnte es ja sein, dass nicht der gesamte Server, sondern nur der DNS-Daemon seinen Dienst quittiert hat. Eine zuverlässigere Methode besteht darin, den DNS-Server mit einer „Auflösungs-Anfrage“ zu prüfen. Dazu installieren wir zunächst das Paket „dnsutils„, da dieses das für uns interessante Tool „dig“ enthält:

 

Nun erstellen wir, wie von anderen Beiträgen gewohnt, im Verzeichnis „/scripts/“ ein neues Script und nennen es „dnscheck.sh„:

 

Meine Version des Scripts ist wie folgt aufgebaut:

 

Wir erlauben das Ausführen des Scripts mit

, übertragen den Besitz an den Nutzer „openhab

und können es wie folgt aufrufen:

 

Beispiel:

 

Überwachen von einzelnen Ports

Manchmal kann es sinnvoll sein, einfach nur zu prüfen, ob ein bestimmter Port auf einem bestimmten Server oder Gerät erreichbar ist. So können wir beispielsweise SSH-Dienste, Webserver oder Telefonanlagen (SIP) prüfen.

Dazu installieren wir das Tool „nmap“ mit…

…und erstellen ein neues Script „/scripts/portcheck.sh“ mit folgendem Inhalt:

 

Die Art und Weise, wie wir mittels „nmap“ in dieser Anleitung Prüfungen durchführen, benötigen zum Teil erhöhte Rechte. Daher installieren wir „sudo“ mit

und tragen eine neue Zeile in die Datei „/etc/sudoers“ ein:

 

Nachdem wir auch diesem Script die Ausführung mit

erlauben und den Besitz mit

übertragen haben, starten wir dieses wie folgt:

 

Beispiel:

 

Überwachung von SSL-Zertifikaten

Wer eine eigene Internetseite sein Eigen nennt und diese über ein SSL-Zertifikat für die Verwendung von HTTPS verfügt, ist daran interessiert, rechtzeitig vor dem Ablauf des Zertifikates gewarnt zu werden.

Dazu nutzen wir das bereits vorinstallierte „OpenSSL“ und verwenden dies im neu zu erstellenden Script „/scripts/sslcert.sh“ mit folgendem Inhalt:

 

Wie gewohnt, ändern wir die Attribute des Scripts durch

, übertragen den Besitz mit

und rufen es mit folgenden Syntax auf:

 

Beispiel:

Wollen wir die Lebensdauer des Zertifikats von „klenzel.de“ in Tagen ausgeben, verwenden wir folgenden Aufruf:

 

 

openHAB konfigurieren

openHAB-Bindings aktivieren

Für unsere Zwecke nutzen wir das openHAB-Binding „exec„. Daher installieren wir dieses mittels apt-Paketverwaltung:

 

Zudem nutzen wir das Script „/scripts/ping.sh„, dass in diesem Beitrag ausführlich beschrieben wurde.

 

openHAB-Items konfigurieren

Nachdem wir die für diesen Beitrag wichtigen Scripte erstellt haben, wenden wir uns der Konfiguration von openHAB zu. Zunächst erstellen wir eine Reihe von neuen Items, die unter anderem die Punkte enthalten, die wir überwachen wollen:

 

Die ersten vier Items werden von einem externen Script befüllt und enthalten Statistiken über die eigene Internetverbindung. Die Umsetzung zeigt dieser Beitrag.

Des Weiteren prüfen wir:

  • zwei Computer auf deren Erreichbarkeit (Zeilen sechs und sieben)
  • unseren eigenen DNS-Server (192.168.1.254), ob dieser die Domain „klenzel.de“ ordnungsgemäß auflösen kann und uns das Ergebnis als Antwort mitteilt
  • unsere Verbindung zum Internet, indem wir eine öffentliche IP im Internet pingen (8.8.8.8, Googles DNS-Server)
  • eine VPN-Verbindung, indem wir mit Ping die Erreichbarkeit des entfernten VPN-Servers auf interner Seite prüfen
  • einen VPN-Standort in Hamburg, indem wir mit Ping die Erreichbarkeit eines internen Rechners innerhalbs des VPN-Standorts Hamburg prüfen
  • eine lokale Telefonanlage, indem wir die Erreichbarkeit des UDP-Ports 5060 (SIP) an der IP-Adresse „192.168.1.124“ prüfen
  • die interne IP eines Webservers
  • die Gültigkeitsdauer des SSL-Zertifikats der Seite „klenzel.de

 

Eine Transform-Map erstellen

Damit uns die Werte „ON“ und „OFF„, die wir als Rückgabewerte unserer Scripte erhalten, in der Sitemap in einer verständlichen Form dargestellt werden, erstellen wir unter „/etc/openhab/configurations/transform/“ eine neue Datei, die wir in diesem Beitrag „nh.map“ nennen:

 

 

Die Sitemap ergänzen

Die Einbindung der neuen Items in die Sitemap habe ich in zwei Bereiche unterteilt. Im Hauptbereich erscheinen die Items, bei denen aktuell ein Problem vorliegt. In einem anderen, untergeordneten Bereich werden sämtliche Monitoring-Items mit ihrem jeweiligen Zustand aufgeführt.

 

Warnungen in der Hauptansicht

Damit wir bei einem Ausfall eines Dienstes direkt und schnell ersichtlich im Hauptbereich unserer Sitemap informiert werden, erstellen wir an dieser Stelle sogenannte dynamische Einträge:

 

Die Angabe von „visibility“ führt dazu, dass diese Items nur bei einem zuvor definierten Zustand an dieser Stelle angezeigt werden. Anders ausgedrückt: wenn der hier angegebene Dienst nicht erreichbar ist, erscheint diese Zeile auf der Hauptseite, sonst nicht. Zertifikatswarnungen werden ab einer Gültigkeit von unter 31 Tagen angezeigt.

 

Alle Informationen

An einer anderen Stelle unserer Sitemap lassen wir unsere Monitoring-Items unabhängig vom Zustand anzeigen. Die Einbindung erfolgt an gewünschter Stelle wie folgt:

 

Unser Ergebnis sieht im Browser bzw. in der App in etwa so aus:

nh1

 

 

Ergänzend könnten wir zudem Regeln definieren, die bei einem Ausfall E-Mails versenden. Es ist nur fraglich, ob das beispielsweise beim Ausfall der Internetverbindung Sinn macht.