DistPing (2018 –)

Start Überwachungssystem

Als ich Anfang Jahres von meinem Server-Überwachungssystem zu spät auf eine Störung hingewiesen wurde, habe ich mir überlegt, ob es andere, bessere Systeme gibt. Ich habe mich danach auf die Suche nach einer Alternative gemacht. In diesem Bereich gibt es sehr viele Systeme, einige sind besser, andere schlechter. Da ich bereits eines der besseren hatte, war die Suche entsprechend schwierig.

Nach einiger Überlegung ist mir aufgefallen, dass es je nach Überwachungssystem günstiger ist, wenn man sich ein Überwachungssystem selber aufbaut. Möglich machen das zum einen die sehr günstigen virtuellen Server der Cloud-Anbieter wie DigitalOcean oder Vultr, zum anderen sind die Server der Cloud-Anbieter in vielen verschiedenen Länder verteilt, sodass es sehr leicht ist, weltweit Server zu mieten.

Kurze Zeit später hatte ich die ersten sechs Server gemietet und aufgesetzt. Als Software dafür wählte ich SmokePing. Das Problem an SmokePing ist aber, dass es immer einen Master (und somit einen Single Point of Failure) geben muss und ich gerne ein ausfallsicheres System wollte.

Entwicklung DistPing

Aus diesem Grund habe ich kurzerhand beschlossen, ein eigenes Monitoring-System zu entwickeln: DistPing. Die Wortkombination besteht aus dem Anfang vom Wort Distributed und dem Wort Ping. DistPing ist eine mit Python entwickelte Software, welche mithilfe von der Software fping die entsprechenden Ziele auf Ihre Verfügbarkeit überprüft und anschliessend mit allen DistPing-Observers vergleicht. Aufgrund von zwei Limiten wird eingestuft, ob ein Ziel nur teilweise oder komplett nicht erreichbar ist. Das Ziel wird entweder als instabil oder offline markiert.

Der Test wird in einem beliebigen Abstand wiederholt. Verglichen mit bestehenden Lösungen kann so ein sehr schneller Intervall verwendet werden, zum Beispiel alle 30 Sekunden. Bestehende Lösungen bieten normalerweise einen Intervall von 60 Sekunden oder mehr an - aber nur wenige bieten einen kürzeren Intervall an.

Der Master, also der Observer, der die ganze Überprüfung durchführt und am Ende die Daten auswertet, wechselt bei jedem Durchgang nach einem Zufallsprinzip. Jeder Observer kennt zu jedem Zeitpunkt den aktuellen Master. Sollte der Master nicht innerhalb eines bestimmten Zeitfensters den Auftrag zur Überprüfung erteilen, wird automatisch unter den verbleibenden Observer ein neuer Master auserkoren. Das System ist damit selbständig und funktioniert auch, wenn einer oder mehrere Observer nicht mehr verfügbar wären.

Wenn ein Problem festgestellt wird, kann ein beliebiges Script ausgeführt werden, welches beispielsweise ein E-Mail versendet oder einen Webhook (zum Beispiel von Slack) aufruft.

Mein DistPing-Netzwerk

Aktuell umfasst mein DistPing Netzwerk 13 Observer, welche auf der ganzen Welt verteilt sind. So befinden sich meine Server in Europa, Nord- und Süd-Amerika, Asien und Australien. So viele Server oder eine so grosse Verteilung ist zwar nicht zwingend erforderlich. Um so mehr Server eingesetzt werden, um so besser werden aber die Resultate, da eine lokale Störung ausgeschlossen werden kann.

Damit die Observer sicher kommunizieren können, habe ich ein VPN-Netzwerk mit ZeroTier aufgebaut.

Status-Seite von DistPing Status-Seite von einem DistPing-Observer.

Zukunft

Ich plane, DistPing in der Zukunft mit weiteren Funktionen auszustatten, unter anderem:

  • Überwachung von Websites
  • Überwachung von Ports
  • Zentrale Verwaltungsoberfläche für die Auswertung der Daten

Software

DistPing ist Open Source und wurde von mir auf GitHub veröffentlicht. Die Software ist aber nicht fertig und damit nicht für den allgemeinen Einsatz empfohlen.

Zurück zu den Projekten