Um 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“.
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:
apt-get install dnsutils
Nun erstellen wir, wie von anderen Beiträgen gewohnt, im Verzeichnis „/scripts/“ ein neues Script und nennen es „dnscheck.sh„:
nano /scripts/dnscheck.sh
Meine Version des Scripts ist wie folgt aufgebaut:
#!/bin/bash
#Pruefen, ob Suffix angegeben
if [ -z "$1" ] ;then
echo "So geht das nicht"
exit 1;
fi
/usr/bin/dig @$1 $2 > /dev/null
DNSTEST=$?
if [ $DNSTEST -eq 0 ]; then
echo "ON"
else
echo "OFF"
fi
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…
apt-get install nmap
…und erstellen ein neues Script „/scripts/portcheck.sh“ mit folgendem Inhalt:
#!/bin/bash
#Benutzung: ./portcheck.sh IP PORT [t|u]
#Pruefen, ob Suffix angegeben
if [ -z "$1" -o -z "$2" -o -z "$3" ] ;then
echo "So geht das nicht"
exit 1;
fi
if [ "$3" = "t" ]; then
sudo nmap -v -sT $1 -p $2 |grep open > /dev/null
PORTTEST=$?
fi
if [ "$3" = "u" ]; then
sudo nmap -v -sU $1 -p $2 |grep open > /dev/null
PORTTEST=$?
fi
if [ $PORTTEST -eq 0 ]; then
echo "ON"
else
echo "OFF"
fi
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
apt-get install sudo
und tragen eine neue Zeile in die Datei „/etc/sudoers“ ein:
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:
#!/bin/bash
#Usage: ./sslcert DOMAIN
#Pruefen, ob Suffix angegeben
if [ -z "$1" ] ;then
echo "So geht das nicht"
exit 1;
fi
ABLAUF=$(echo QUIT | openssl s_client -host $1 -port 443 -servername $1 2>/dev/null | sed -ne '/BEGIN CERT/,/END CERT/p' | openssl x509 -noout -text | grep After | sed 's/Not After : //g' |sed 's/^[ t]*//')
echo $(( ($(date -d "$ABLAUF" +%s) - $(date +%s)) / 86400 ))
Wie gewohnt, ändern wir die Attribute des Scripts durch
chmod +x /scripts/sslcert.sh
, übertragen den Besitz mit
chown openhab: /scripts/sslcert.sh
und rufen es mit folgenden Syntax auf:
/scripts/sslcert.sh DOMAINNAME
Beispiel:
Wollen wir die Lebensdauer des Zertifikats von „klenzel.de“ in Tagen ausgeben, verwenden wir folgenden Aufruf:
/scripts/sslcert.sh klenzel.de
openHAB konfigurieren
openHAB-Bindings aktivieren
Für unsere Zwecke nutzen wir das openHAB-Binding „exec„. Daher installieren wir dieses mittels apt-Paketverwaltung:
apt-get install openhab-addon-binding-exec
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 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:
Frame label="Warnungen" {
Text item=INET_DNS label="DNS-Server ist [MAP(nh.map):%s]" icon="computer" visibility=[INET_DNS==OFF]
Text item=NH_INET label="Internetverbindung ist [MAP(nh.map):%s]" icon="computer" visibility=[NH_INET==OFF]
Text item=NH_VPN label="VPN-Tunnel ist [MAP(nh.map):%s]" icon="computer" visibility=[NH_VPN==OFF]
Text item=NH_HH label="Standort Hamburg ist [MAP(nh.map):%s]" icon="computer" visibility=[NH_HH==OFF]
Text item=SSL_KLENZELDE label="Gültigkeit Tage klenzel.de: [%s]" icon="computer" visibility=[SSL_KLENZELDE<=30]
}
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:
Frame label="Monitoring" {
Text label="Internetgeschwindigkeit" icon="gauge" {
Text item=INET_PING icon="ping"
Text item=INET_DOWN icon="download"
Text item=INET_UP icon="upload"
Text item=INET_IP icon="gauge"
Switch item=CHART_PERIOD label="Zeitspanne" mappings=[0="Stunde", 1="Tag", 2="Woche"]
Chart item=INET_PING period=h refresh=300 visibility=[CHART_PERIOD==0, CHART_PERIOD=="Uninitialized"]
Chart item=INET_PING period=D refresh=1800 visibility=[CHART_PERIOD==1]
Chart item=INET_PING period=W refresh=3600 visibility=[CHART_PERIOD==2]
Chart item=INET_DOWN period=h refresh=300 visibility=[CHART_PERIOD==0, CHART_PERIOD=="Uninitialized"]
Chart item=INET_DOWN period=D refresh=1800 visibility=[CHART_PERIOD==1]
Chart item=INET_DOWN period=W refresh=3600 visibility=[CHART_PERIOD==2]
Chart item=INET_UP period=h refresh=300 visibility=[CHART_PERIOD==0, CHART_PERIOD=="Uninitialized"]
Chart item=INET_UP period=D refresh=1800 visibility=[CHART_PERIOD==1]
Chart item=INET_UP period=W refresh=3600 visibility=[CHART_PERIOD==2]
} //Internet Ende
Text item=WST126 label="APC Tina [MAP(anaus.map):%s]" icon="computer"
Text item=WST129 label="APC Daniel [MAP(anaus.map):%s]" icon="computer"
Text item=INET_DNS label="DNS-Server ist [MAP(nh.map):%s]" icon="computer"
Text item=NH_INET label="Internetverbindung ist [MAP(nh.map):%s]" icon="computer"
Text item=NH_VPN label="VPN-Tunnel ist [MAP(nh.map):%s]" icon="computer"
Text item=NH_HH label="Standort Hamburg ist [MAP(nh.map):%s]" icon="computer"
Text item=NH_SIP label="Telefonanlage ist [MAP(nh.map):%s]" icon="computer"
Text item=NH_WEB label="Webserver klenzel.de ist [MAP(nh.map):%s]" icon="computer"
Text item=SSL_KLENZELDE label="Tage gültig klenzel.de [%s]" icon="computer"
} //Monitoring Ende
Unser Ergebnis sieht im Browser bzw. in der App in etwa so aus:
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.
openHAB :: Kleines Netzwerkmonitoring
Um 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
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:
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:
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.
Verwandte Beiträge
Wenn wir OpenHAB aus den entsprechenden Repositories installiert haben, wurde ein neuer, nicht priviligierter Nutzer…
Als ein kleines Gimmik habe ich in openHAB einen kleinen Wecker realisiert. Dabei nutzte ich ein…
Auch von unterwegs ist es möglich, auf seine Hausautomatisierung zuzugreifen. Gern wüsste man, ob das…
In diesem Artikel geht es um die Installation der Hausautomatisierungssoftware openHAB auf ein bereits installiertes und…
Die heutigen Smartphones enthalten meist ein NFC-Modul mitsamt intern verbauter Antenne. Mit dieser "Near-Field-Communication"-Technologie ist…