Was auf meinem Server läuft, und ob es noch läuft
Auf dem Server laufen ein paar Dienste durch. Wenn einer abstürzt, merke ich das im Zweifel erst Tage später, weil irgendwo etwas fehlt. Vorher müsste ich mich einloggen und die Statusausgaben durchgehen, und das mache ich natürlich nicht jeden Morgen.
Jetzt gibt es eine Weboberfläche, die das für mich abfragt: Zustand, Laufzeit, die letzten Logzeilen. Wichtig war mir dabei, dass die Dienste selbst nichts davon mitbekommen. Kein Agent, den ich überall mitinstallieren muss. Sie schreiben ihre Logs und JSON-Dateien weiter wie vorher, das Board liest die nur aus. Wenn es abstürzt, läuft der Rest einfach weiter.
- Prozess
- Ein Flask-Dienst, selbst unter systemd, hinter Reverse-Proxy mit HTTPS
- Zugang
- Session-Login, TOTP als zweiter Faktor, davor eine eigene Basic-Auth-Schicht
- Begrenzung
- 20 Anmeldeversuche pro Minute, 5 pro Sekunde
- Zustand
- Kein Datenbankserver — JSON-Dateien und Logs im Dateisystem
- Abfrage
- systemctl über einen Unterprozess, Ergebnis 30 s zwischengespeichert
- Wartung
- Eine Flag-Datei sperrt sämtliche Routen — außer von localhost, damit ich mich nicht selbst aussperre
- Eigenkontrolle
- Ein Cron-Job prüft alle 30 Minuten von außen, ob die Oberfläche noch antwortet
systemd startet den Dienst nach Absturz oder Neustart von selbst wieder. Der Reverse-Proxy nimmt HTTPS ab — die App selbst spricht intern nur Klartext.
Drei Schichten hintereinander. Basic-Auth fragt der Server ab, bevor die App die Anfrage überhaupt sieht — dann Passwort, dann ein Zahlencode aus der Authenticator-App.
Zwei Grenzen gleichzeitig: die pro Sekunde bremst schnelles Durchprobieren, die pro Minute das langsame. Wer sie reißt, wird kurz ausgesperrt.
Eine Oberfläche, die nur anzeigt, braucht keine Datenbank. Dateien kann ich lesen, sichern und zur Not von Hand reparieren.
Jeder Aufruf würde sonst systemctl neu starten. Das Ergebnis 30 Sekunden zu behalten reicht — so oft ändert sich der Zustand nicht.
Eine einzelne Datei legt alles still, ohne Deploy. Localhost bleibt offen, damit ich mich beim Warten nicht selbst aussperre.
Ein toter Dienst kann nicht melden, dass er tot ist. Also prüft ihn etwas Zweites von außen und schlägt Alarm, wenn nichts mehr antwortet.
Läuft bei mir hinter einem Login. Nichts zum Angucken, deshalb hier nur beschrieben.
14:28:04collector — Durchlauf beendet, 412 Datensätze
14:27:31watchdog — alle Prüfpunkte bestanden
14:12:09archiver — beendet mit Code 1
und Statusdateien
systemd-Zustand
zeigt an
Läuft nur in eine Richtung.