Kategorien
Anleitungen

Serverlatenz anzeigen

In diesem Beitrag geht es darum, eine Lampe von GetDigital (www.getdigital.de/usb-mail-melder.html) so zu steuern, dass sie in regelmäßigen Abständen die Latenz zu einem entfernten Server misst und entsprechend grün, gelb oder rot leuchtet. Sie war ursprünglich dazu gedacht, bei neuen E-Mails und Twitter-Nachrichten zu leuchten, kann aber unter Linux leicht für alle möglichen Anzeigen zweckentfremdet werden. In diesem Fall soll sie darauf aufmerksam machen, wenn ein Webserver z.B. mit der eigenen Nextcloud langsam oder gar nicht reagiert.

Eine GetDigital-Lampe leuchtet grün, um anzuzeigen, dass die Latenz zur unixAG-Website im zweistelligen Bereich liegt. Links daneben ist ein Ausschnitt des Skripts zu sehen.

Das Bash-Skript misst zunächst die Latenz und prüft den HTTP-Statuscode, um anschließend die Lampe in einer bestimmten Farbe leuchten oder blinken zu lassen. Es kann hier herunter geladen werden:
blog-unixag.stud.unixag.net/shares/latenzanzeige.sh

Die herunter geladene Datei muss mit chmod a+x latenzanzeige.sh ausführbar gemacht werden und kann dann mit sudo ./latenzanzeige.sh gestartet werden. Außerdem kann man sie als Cron Job (der Aufgabenplanung unter Linux) speichern und minütlich ausführen, indem sudo crontab -e aufgerufen und folgende Zeile angehängt wird:
„* * * * * /home/BENUTZERNAME/latenzmelder.sh“.
Das Skript braucht Root-Rechte, um die Dateien unter /sys/class/leds bearbeiten und die Lampe steuern zu können.

Dafür kommt uns zu gute, dass sie getreu dem Linux-Motto „everything is a file“ in das Dateisystem eingebunden wird und man nur Werte in bestimmte Dateien schreiben muss, um sie leuchten zu lassen. Beispielsweise kann man mit ls /sys/class/leds alle angeschlossenen LEDs anzeigen lassen.
Im Folgenden wird das Skript Zeile für Zeile beschrieben. Zum Verständnis ist es hilfreich, wenn man etwas Erfahrung mit der Linux-Shell hat. Alternativ findet man für den Einstieg hier ein ausführliches Tutorial: wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/. Falls man einen Befehl nicht versteht kann man in der Linux-Shell immer mit man BEFEHL dessen Hilfe aufrufen.

  • #!/bin/bash legt die Shell fest, die das Skript ausführen soll. Bash bietet mehr Möglichkeiten als die standardmäßig verwendete Sh.
  • Direkt darunter folgen eine Beschreibung und die Deklaration einiger Konstanten.
  • In den Zeilen 10, 21 und 34 werden drei Funktionen definiert, die später gebraucht und weiter unten erklärt werden.
  • Zeilen 44 ff. prüfen, ob beim Start des Skripts eine Domain als Argument übergeben wurde. Diese Prüfung ist sehr rudimentär und könnte mit regulären Ausdrücken verbessert werden.
  • Anschließend wird die Funkltion getPort aufgerufen, um mit einer einfachen Schleife die Nummer des Anschlusses der Lampe zu ermitteln, und ausgelesen welche maximale Helligkeit sie unterstützt.
  • In Zeile 58 wird mit ping die Latenz zum angegebenen Server gemessen. Die Ausgabe des Programms wird über eine sogenannte Pipe an awk übergeben, was aus dem ganzen Text den Wert mit der Latenz raus sucht.
  • Im besten Fall springt die if-Abfrage in Zeile 60, in der mit wget zusätzlich geprüft wird, ob unter der angegebenen Domain ein Webserver mit „200 OK“ antwortet. Wiederum muss mit awk die Ausgabe so verändert werden, das nur der relevante Teil übrig bleibt.
  • In den Zeilen 63 ff. wird etwas mit der Latenz jongliert, um daraus RGB-Werte für die LED im Bereich 0 bis 31 (das Maximum der hier eingesetzten Lampe) zu erzeugen und setBrightness aufgerufen.
  • Dort wird jeweils für rot, grün und blau die geforderte Helligkeit in die passende Datei geschrieben.
  • Falls der gewünschte Server nicht innerhalb von fünf Sekunden geantwortet hat, soll festgestellt werden, ob überhaupt eine Internetverbindung besteht. Dazu wird in Zeile 76 mit ping geprüft, ob ein bekannter DNS-Server erreichbar ist.
  • Falls ja, blinkt die Lampe einige Male gelb, und falls nein oder falls der Webserver einen Fehler meldet, blinkt die Lampe rot. Dafür ist blinkLed zuständig.

Leider ist diese Dream Cheeky-Lampe momentan bei GetDigital nicht erhätlich, aber Alternativen sollten sich auf die gleiche Weise ansprechen lassen. Außerdem könnte man anstatt neuer E-Mails oder der Erreichbarkeit eines Webservers beliebige andere Daten wie z.B. Auslastung oder Temperatur des eigenen PCs anzeigen.