All posts
engineeringinfra

Live-Status-Graphen ganz ohne zusätzlichen Ballast bauen

Wir wollten diese sauberen Graphen im Checkmate-Stil auf unserer öffentlichen Status-Seite. Antwortzeiten und Server-Ressourcen direkt neben den üblichen Uptime-Balken. Was wir auf keinen Fall wollten: eine ganze zweite Monitoring-App betreiben, nur um ein paar Linien auf einen Bildschirm zu zeichnen.

Die Daten waren längst da

Das Lustige ist, wir haben gemerkt, dass wir bereits auf allen Daten saßen, die wir brauchten. Unser Discord-Bot prüft jeden unserer Dienste ohnehin mit einem 5-Minuten-Heartbeat. Der Probe maß bei jeder einzelnen Anfrage die Antwortzeit, warf diese Zahl dann aber einfach weg und gab nur ein schlichtes "online" oder "offline" zurück. Wir haben die Graph-Daten also buchstäblich berechnet und sofort wieder gelöscht, herrlich.

Der Fix war entsprechend federleicht:

  • Die Latenz erfassen, die der Probe ohnehin schon maß, statt sie wegzuwerfen.
  • Host-CPU / RAM / Disk direkt aus /proc holen (nur mit der Linux-Stdlib).
  • Beide Metriken speichern, direkt neben unseren bestehenden Uptime-History-Einträgen.
  • Inline-SVG-Sparklines direkt auf die Status-Karten zeichnen.

Warum nicht einfach Uptime Kuma?

Versteht uns nicht falsch, Tools wie Checkmate oder Uptime Kuma sind großartig, aber es sind komplett eigenständige Anwendungen. Sie bringen ihre eigene Datenbank, Nutzer-Auth und UI mit. Da wir auf einem geteilten Host laufen, ist das einfach mehr, das wir betreiben und absichern müssten, und es würde obendrein nicht zu unserem maßgeschneiderten, handgebauten Frontend-Design passen. Wir hatten bereits 90 % der Logik geschrieben, warum also noch mehr Wirrwarr hinzufügen?

Unsere neue Regel: Nutze tatsächlich die Daten, die du schon hast, bevor du einen ganz neuen Dienst installierst, um sie zu sammeln.

Der Stack

MetrikQuelle
Antwortzeitbestehender Bot-Probe (elapsed)
CPU / RAM/proc/stat, /proc/meminfo
Diskshutil.disk_usage

Am Ende standen null neue Abhängigkeiten beim Bot, keine schweren Charting-Libraries auf der Seite und keine neuen Hintergrunddienste zu verwalten. Nur ein ehrlicher Umgang mit Zahlen, die wir ohnehin längst gesammelt haben.