← Alle Module |
S
Systemstatus & Logs
Grundfunktion

Systemstatus & Logs

Das Health-Dashboard liefert global_admin-Benutzern auf einen Blick den technischen Zustand der gesamten Installation — Lizenz, Datenbank, Cache, alle Mandanten und aktiv angemeldeten Benutzer — sowie Zugriff auf die Server-Logs und einen Debug-Info-Export für Support-Anfragen.

Auto-Refresh alle 30 s Mandantenübergreifender Überblick Live-Log-Tail
Berechtigung: Systemstatus und Logs sind ausschließlich für Benutzer mit der Rolle global_admin erreichbar — sichtbar im Menü Einstellungen → Systemstatus (siehe „Einstellungen"-Menü). Anders als die Mandantenverwaltung ist dieser Bereich nicht an die Multi-Mandant-Lizenz gebunden — er existiert auch in einer Installation mit nur einem Mandanten.
📊

Health-Dashboard

Route: GET /system/health · Menüpfad: Einstellungen → Systemstatus

Health-Dashboard mit Lizenz-Info, Datenbank-, Cache- und Mandantenstatistiken

Die Seite aktualisiert sich automatisch alle 30 Sekunden (einfacher <meta http-equiv="refresh">) und gliedert sich in mehrere Karten.

Lizenz

  • Lizenzinhaber, Ausgestellt, Gültig bis — Stammdaten der eingespielten Lizenzdatei, sowie ein Badge Gültig/Abgelaufen.
  • Feature-FlagsMulti-Mandant und White-Label jeweils als grünes (aktiv) oder graues (inaktiv) Badge.
  • Modul-Badges — ein Badge pro Fachmodul (ETB, Patienten, UHS, Stab, Lagekarte, Bereitstellung, Tetra, Shelter): grün mit Häkchen, wenn das Modul lizenziert ist, grau mit Kreuz, wenn nicht. Diese Lizenz-Verfügbarkeit ist die Voraussetzung für die Modul-Schalter pro Einsatz — ein nicht lizenziertes Modul kann auch über den Einsatz-Schalter nicht aktiviert werden.

Datenbank & In-Memory-Cache

  • Datenbank: Verbindungsstatus, Dateigröße der SQLite-Datenbank, sowie Verbindungspool-Kennzahlen (offen/genutzt/idle, Warte-Aufrufe, Max. Verbindungen).
  • In-Memory-Cache: Anzahl der aktuell im Arbeitsspeicher gehaltenen Benutzer, aktiven Sitzungen, Einsätze, Einsatzmittel und Mandanten — der Cache wird nach jeder schreibenden Operation aktualisiert (Refresh*-Methoden) und dient als schnelle Lese-Schicht vor der Datenbank.

Mandantenstatistiken

Eine Tabelle mit einer Zeile pro Mandant (siehe Mandantenverwaltung): Hostname, Anzahl Benutzer, aktive Sitzungen, Gesamtzahl Einsätze, davon aktiv (grünes Badge), sowie die Größe der hochgeladenen Dateien dieses Mandanten.

Laufzeit & Build-Info

Go-Version, Anzahl Goroutinen, Speicherverbrauch (Heap/Sys) und GC-Durchläufe für die technische Diagnose, sowie Release-Version, Modulpfad und Git-Revision des laufenden Builds — hilfreich, um bei einem Support-Fall sofort zu sehen, welcher genaue Softwarestand betroffen ist.

Hinweis: Alle Zahlen auf dieser Seite stammen aus demselben internen Snapshot (buildSystemHealthData()), der auch dem Debug-Info-Export zugrunde liegt — beide zeigen exakt dieselben Werte, nur in unterschiedlicher Darstellung (HTML vs. Klartext).
📡

Aktive WebSocket-Sitzungen

Karte „Aktive Benutzer" im Health-Dashboard

Diese Tabelle listet jeden Benutzer, der aktuell eine gültige Sitzung besitzt, mit Benutzername, vollem Namen, Mandant und allen Rollen-Badges.

Spalte „Aktuelle Seiten"

Diese Spalte zeigt nicht die letzte besuchte HTTP-Seite, sondern die tatsächlich offenen WebSocket-Verbindungen des Benutzers (h.Hub.Clients()) — also auf welcher Seite der Browser aktuell live Aktualisierungen empfängt (z. B. die ETB-Meldungsseite oder das Belegungs-Dashboard im UHS-Modul). Ein Benutzer kann mehrere Einträge zugleich haben, wenn mehrere Browser-Tabs offen sind; „–" bedeutet, dass aktuell keine WebSocket-Verbindung besteht (z. B. weil der Benutzer sich auf einer Seite ohne Live-Updates befindet).

Praktischer Nutzen: Bei der Fehlersuche zeigt diese Tabelle sofort, ob ein gemeldetes Problem („bei mir aktualisiert sich nichts") tatsächlich an einer fehlenden WebSocket-Verbindung liegt — der betroffene Benutzer würde dann ohne Einträge in „Aktuelle Seiten" erscheinen, obwohl er angemeldet ist.
📄

Logs ansehen

Route: GET /system/logs · Schaltfläche Logs im Health-Dashboard

Logdatei-Browser mit nach Kategorie gruppierten Logdateien (Server, Zugriffe, ggf. TETRA-Gateway)

Die Logdatei-Übersicht ist in drei Bereiche gegliedert, damit das hohe Aufkommen an HTTP-Zugriffen und TETRA-Funkverkehr nicht die eigentlich relevanten Anwendungs- und Fehlermeldungen überdeckt:

  • Server (server.log) — Anwendungs-Lifecycle, Datenbank, geplante Aufgaben und Fehlermeldungen.
  • Zugriffe (HTTP) (access.log) — eine Zeile pro eingehendem HTTP-Request.
  • TETRA-Gateway (tetra.log) — Funkverkehr über /wsapi (Gruppenrufe, Statusmeldungen, Positionsdaten).

Jeder Bereich zeigt die aktuelle Logdatei sowie alle automatisch rotierten Backups (<name>-<Zeitstempel>.log, ggf. .gz-komprimiert), jeweils mit Größe und letztem Änderungsdatum. Ein Bereich erscheint nur, wenn für ihn bereits Logdateien existieren.

Anzeigen vs. Herunterladen

  • Anzeigen — nur für unkomprimierte Dateien verfügbar. Lädt per GET /system/logs/tail die letzten 300 Zeilen direkt in die Seite (Live-Tail-Ansicht, siehe Screenshot unten).
  • Herunterladen — funktioniert für jede Datei inklusive komprimierter Backups, lädt die vollständige Datei als Anhang herunter (GET /system/logs/download).
Live-Tail-Ansicht der server.log mit Kopier-Schaltfläche

Bedienung der Tail-Ansicht

  1. Bei der gewünschten Datei auf Anzeigen klicken.
  2. Die letzten 300 Zeilen erscheinen in einem scrollbaren Textblock unterhalb der Tabelle.
  3. Über die Schaltfläche Kopieren lässt sich der angezeigte Ausschnitt direkt in die Zwischenablage kopieren — z. B. um ihn in eine Support-Anfrage einzufügen.
Sicherheit: Der Dateiname wird nie direkt zu einem Dateisystempfad zusammengesetzt, sondern stets gegen die echte Verzeichnisliste der Logdateien abgeglichen — ein Zugriff außerhalb des Log-Verzeichnisses (Path Traversal) ist dadurch grundsätzlich ausgeschlossen, selbst wenn der file-Parameter manipuliert wird. Zusätzlich werden ausschließlich Dateien berücksichtigt, deren Name einem der bekannten Namensschemata entspricht (server.log, access.log, tetra.log bzw. <name>-…).
📋

Debug-Info kopieren/exportieren

Route: GET /system/debug-info · Schaltfläche Debug-Info kopieren im Health-Dashboard

Diese Funktion wurde gezielt für Support-Anfragen entwickelt: Statt einzeln Bildschirmfotos vom Health-Dashboard zu machen und Logzeilen zusammenzukopieren, liefert ein Klick einen vollständigen Klartext-Bericht in die Zwischenablage.

Inhalt des Berichts

  • Release-Version, Revision, Build-Zeit, Go-Version, Betriebssystem/Architektur.
  • Datenbankstatus, Dateigröße, Verbindungspool-Kennzahlen.
  • Cache-Zahlen (Benutzer, Sitzungen, Einsätze, Einsatzmittel, Mandanten).
  • Laufzeit-Kennzahlen (Goroutinen, Speicher, GC-Durchläufe).
  • Mandantenstatistiken — pro Mandant Benutzer-/Sitzungs-/Einsatzzahlen und Upload-Größe in einer Zeile.
  • Die letzten 100 Logzeilen aus server.log (Anwendungslog — Zugriffs- und TETRA-Logs sind hier bewusst nicht enthalten).

Bedienung

  1. Im Health-Dashboard auf Debug-Info kopieren klicken.
  2. Der Bericht wird per Clipboard-API direkt in die Zwischenablage kopiert — die Schaltfläche bestätigt das kurz mit „Kopiert!".
  3. Ist die Clipboard-API nicht verfügbar (z. B. weil die Seite nicht über einen als sicher geltenden Kontext aufgerufen wurde), öffnet sich automatisch ein auswählbares Textfeld als Fallback, aus dem der Inhalt manuell kopiert werden kann.
  4. Den Inhalt in die Support-Anfrage (E-Mail, Ticket, Chat) einfügen.

Nutzung über die Kommandozeile

Da /system/debug-info eine normale, mit Basic Auth und Sitzungscookie geschützte Route ist, lässt sich derselbe Bericht auch direkt per curl abrufen — etwa wenn die Oberfläche selbst nicht erreichbar ist oder das Ergebnis gleich in eine Datei geschrieben werden soll:

curl -u einsatz:PASSWORT https://<host>/system/debug-info \
  -b "session=<eigener-Sitzungscookie>" \
  -o debug-info.txt

-u liefert dabei die nginx-Basic-Auth-Zugangsdaten (siehe server/deployment/nginx.conf), das gültige Sitzungscookie muss zusätzlich aus einer bestehenden Browser-Anmeldung stammen, da /system/debug-info selbst die normale global_admin-Rollenprüfung durchläuft.

Hintergrund: Diese Funktion wurde bewusst so gestaltet, dass dieselbe Datengrundlage über zwei Wege erreichbar ist — interaktiv per Clipboard-Button für den Alltag, und als reiner Klartext-Endpunkt per curl für Fälle, in denen kein Browser zur Verfügung steht oder ein automatisiertes Monitoring den Bericht regelmäßig abgreifen soll.