DMN/Software

ProjekteStatusdienst

Statusdienst

Ein selbst gehosteter Uptime- und Statusdienst in Go. Er prüft Websites, TCP-Ports und FiveM-Server, zeigt Verfügbarkeit und Antwortzeiten öffentlich an und meldet Ausfall und Wiederkehr per Mail.

Statusseite mit der Überschrift Alle Dienste erreichbar, Stand 17:21 Uhr, darunter die vier Dienste Website, Bewerbungsportal, Bewerbungen-API und der Quellen-Chat, alle erreichbar, jeder mit HTTP-Prüfung und einer Leiste der letzten Stunden. Unter Vorfälle der beendete Vorfall der Website
Die öffentliche Statusseite am 23.09.2026, darunter der zuletzt beendete Vorfall.

Eckdaten

Stand

Ziele
4 auf der öffentlichen Statusseite
Verfügbarkeit seit Messbeginn am 17.09.
Website 99,77 %, Bewerbungsportal 100,00 %, Bewerbungen-API 99,98 %, Quellen-Chat 100,00 %
Tests
142 Testfunktionen in 31 Dateien

Ein Aussetzer ist noch kein Ausfall

Ein Vorfall beginnt erst nach mehreren Fehlschlägen in Folge. Wie viele es sein müssen, ist je Ziel einstellbar, voreingestellt sind drei. Ein einzelner Timeout bleibt ein Messpunkt und löst keinen Alarm aus.

Mit dem Vorfall geht eine Mail raus. Antwortet das Ziel wieder, endet er, und die zweite Mail nennt, wie lange der Ausfall gedauert hat.

Skizze eines Ablaufs, keine Messwerte.

Eine Goroutine pro Ziel

Jedes Ziel läuft in einer eigenen Goroutine mit eigenem Intervall. Ein zufälliger Versatz verhindert, dass alle Prüfungen im selben Moment starten. Mehr als acht laufen nie gleichzeitig, die übrigen warten auf einen freien Platz.

HTTP(S) prüft, ob der Statuscode im erlaubten Bereich liegt, auf Wunsch auch ein Stichwort im Antworttext. TCP prüft nur, ob der Port eine Verbindung annimmt.

Bei FiveM-Servern fragt der Dienst info.json und players.json des FXServers ab. Gespeichert werden Spielerzahl, Maximum und Version, Spielernamen nicht.

  1. Goroutine wartet ihr Intervall ab, mit zufälligem Versatz
  2. Platz wird frei, höchstens acht Prüfungen laufen gleichzeitig
  3. Prüfung per HTTP(S), TCP oder FiveM
  4. SQLite speichert Ergebnis und Antwortzeit

Statusseite und Verwaltung

Die Statusseite zeigt für jedes Ziel die Verfügbarkeit über 24 Stunden, 7 Tage und 30 Tage, eine Leiste der letzten 90 Stunden und den Verlauf der Antwortzeit. Adressen und Fehlertexte stehen dort nicht. Die Seite gibt es auf Deutsch und Englisch.

Die Diagramme entstehen als SVG auf dem Server. Rohdaten bleiben 30 Tage liegen und werden stündlich verdichtet.

Ziele und Vorfälle werden in einer eigenen Oberfläche hinter einem Login gepflegt.

Sicherheit

Der Dienst ruft Adressen auf, die in der Verwaltung eingetragen werden. Damit darüber niemand ins interne Netz kommt, zählt die IP nach der Namensauflösung, nicht der Hostname.

Technik

Sprache
Go mit net/http, html/template und embed aus der Standardbibliothek
Daten
SQLite ohne CGO über modernc.org/sqlite
Diagramme
SVG, auf dem Server erzeugt
Betrieb
ein Binary im Docker-Image auf Basis von distroless, Dateisystem schreibgeschützt
CI
GitHub Actions mit go test -race, golangci-lint und govulncheck

Live