Dashboard, Warnungen und Metriken
Web-Dashboard, Warnungen an Discord und andere Webhooks, Prometheus-Metriken und Logdateien.
Dashboard
Das Dashboard ist eine Weboberfläche, die die Cloud selbst ausliefert. Es ist standardmäßig aus
und lauscht nur auf 127.0.0.1:8780.
dashboard on
dashboard password <new password>
dashboardDas Passwort braucht mindestens acht Zeichen. Alle Änderungen gelten ab dem nächsten Start der
Cloud. dashboard zeigt den aktuellen Stand und, falls etwas das Dashboard zurückhält, auch den
Grund.
Anmelden kann man sich auf zwei Arten. Bleibt das Feld Spielername leer, gilt das gemeinsame
Passwort, und wer es kennt, darf alles, was das Dashboard bietet. Mit Spielernamen gilt das eigene
Passwort dieses Benutzers aus user password <name> <password>, und er darf nur, was seine Rollen
in access.toml erlauben. Ein vergessenes Passwort lässt sich nur in der Konsole zurücksetzen.
| Bereich | Inhalt |
|---|---|
| Übersicht | Gruppen mit Starten, Neustarten, Stoppen, Bearbeiten und bei statischen Gruppen Sichern; Gruppen anlegen; Server mit Log, Leerlaufen lassen, Neustarten und Stoppen |
| Spieler | wer online ist, auf welchem Server und seit wann |
| Benutzer | Konten mit Rollen, Rollen mit Rechten, vorhandene Tokens |
| Ränge | Spielerränge und wer welchen hat |
| Sicherungen | die letzten zwanzig Backups mit Wiederherstellen |
| Netzwerk | Durchsage, Wartung und Ausnahmen |
| Konsole | Befehle eingeben, mit Ausnahmen |
Die Seite aktualisiert sich alle drei Sekunden. In der Konsole des Dashboards fehlen bewusst die
Befehle, die den Zugriff selbst ändern oder die Cloud stoppen: stop, groups <name> delete,
service <name> screen, dashboard, alerts, token, update, data, audit, addon und
publish. Jede Aktion im Dashboard wird in audit.log mit der Quelle dashboard festgehalten.
Von außen erreichbar
Eine Adresse außerhalb des Servers nimmt die Cloud nur unter bestimmten Bedingungen an. Sonst
fällt sie auf 127.0.0.1 zurück und nennt den Grund.
| Adresse | Voraussetzung |
|---|---|
127.0.0.1 | keine |
| privates Netz oder Tailscale | ein Passwort ist gesetzt |
| öffentliche Adresse | Passwort, Domain und Port 443 für Let's Encrypt |
| hinter deinem eigenen Reverse Proxy | Passwort und allow_insecure = true |
dashboard bind 0.0.0.0:443
dashboard domain cloud.example.com
dashboard contact [email protected]Der A-Record der Domain muss auf den Server zeigen. Die Cloud holt sich das Zertifikat selbst und
legt es unter cache/acme ab. Auf Port 80 leitet sie danach auf https um. dashboard staging on
nutzt zum Testen die Staging-Umgebung von Let's Encrypt, deren Zertifikate kein Browser
akzeptiert. Ein normaler Benutzer darf keine Ports unter 1024 öffnen, die Cloud gibt dafür den
passenden setcap-Befehl aus.
Weitere Felder gibt es nur in der Datei:
[dashboard]
session_hours = 12
trusted_proxies = ["127.0.0.1"]
allow_insecure = falsesession_hours legt fest, wie lange eine Anmeldung gültig bleibt. trusted_proxies listet die
Reverse Proxys, deren X-Forwarded-For die Cloud vertraut, damit die Sperre nach Fehlversuchen die
richtige Adresse trifft.
Nach fünf fehlgeschlagenen Anmeldungen von einer Adresse innerhalb einer Minute wird diese Adresse
für eine Minute gesperrt. Nach zwanzig über alle Adressen zusammen ist die Anmeldung für alle
gesperrt. In beiden Fällen geht die Warnung login-blocked raus.
Warnungen
Die Cloud meldet Ereignisse an einen Discord-Webhook oder an jede andere URL, die JSON annimmt.
alerts webhook https://discord.com/api/webhooks/...
alerts test
alerts events service-crashed service-hanging node-lost backup-failed
alerts events alle
alerts quiet 10
alerts offalerts webhook schaltet die Warnungen gleichzeitig ein, alerts test schickt eine Testnachricht
und zeigt die Antwort der Gegenseite. Ohne alerts events werden alle Ereignisse gesendet.
| Ereignis | Stufe | Wann |
|---|---|---|
service-crashed | Fehler | ein Server endet unerwartet, mit dem Pfad zum Absturzbericht |
service-start-failed | Fehler | ein Server lässt sich nicht starten |
service-hanging | Fehler | der Watchdog hält einen Server für eingefroren |
group-paused | Fehler | drei Abstürze hintereinander, die Gruppe pausiert eine Minute |
backup-failed | Fehler | ein geplantes Backup ist fehlgeschlagen |
node-lost | Fehler | ein Worker hat seine Verbindung verloren |
node-back | Info | eine Node hat sich verbunden |
memory-tight | Warnung | keine Node hat genug Arbeitsspeicher für den nächsten Server |
login-blocked | Warnung | zu viele falsche Anmeldungen oder Tokens |
rollout-waiting | Warnung | eine geänderte Vorlage wartet auf Freigabe |
shield-attack | Warnung | das Schutzschild lehnt innerhalb einer Minute viele Verbindungen ab |
shield-block | Warnung | das Schutzschild hat automatisch Adressen gesperrt |
update-available | Info | eine neue Version ist verfügbar |
cloud-started, cloud-stopped | Info | die Cloud startet oder stoppt |
Dasselbe Ereignis für denselben Server, dieselbe Gruppe oder Node wird innerhalb von quiet
Minuten nur einmal gesendet, alerts quiet 0 schaltet das ab. Andere URLs als Discord bekommen ein
flaches JSON mit event, level, node, subject, detail und text.
Metriken
GET /metrics auf der API-Adresse liefert Prometheus-Text. Das Token braucht das Recht
groups.view, ein eigenes für Prometheus ist schnell angelegt:
token create prometheus groups.viewscrape_configs:
- job_name: mutecloud
authorization:
credentials: <token>
static_configs:
- targets: ["127.0.0.1:8770"]| Metrik | Labels | Inhalt |
|---|---|---|
mutecloud_up | immer 1 | |
mutecloud_build_info | version, node | Version der Cloud |
mutecloud_memory_mb | node, art | budget und belegt |
mutecloud_nodes | node, rolle | 1 für jede verbundene Node |
mutecloud_players | Spieler im Netzwerk | |
mutecloud_group_services | gruppe | laufende Server |
mutecloud_group_scale | gruppe, grenze | min und max |
mutecloud_group_players | gruppe | Spieler in der Gruppe |
mutecloud_group_maintenance | gruppe | 1 bei Wartung |
mutecloud_service_players | server, gruppe, node | Spieler auf dem Server |
mutecloud_service_memory_mb | wie oben | zugewiesener Arbeitsspeicher |
mutecloud_service_rss_mb | wie oben | tatsächlich genutzter Arbeitsspeicher |
mutecloud_service_cpu_percent | wie oben | CPU-Last |
mutecloud_service_uptime_seconds | wie oben | Laufzeit |
mutecloud_service_ready | wie oben | 1, wenn er Spieler annimmt |
mutecloud_service_states | zustand | Anzahl der Server pro Zustand |
mutecloud_rollout_pending | gruppe, freigabe | Server auf einer alten Vorlage |
mutecloud_shield_* | je nach Wert | Kennzahlen des Schutzschilds |
Logdateien
logs zeigt, welche Logdateien es gibt und wie lange sie aufbewahrt werden.
| Datei | Inhalt |
|---|---|
logs/mutecloud.<date>.log | alles, jeden Tag neu |
logs/fehler.<date>.log | nur Warnungen und Fehler |
audit.log | wer was von außen ausgeführt hat |
update.log | jede installierte Version |
dumps/<server>-<time>/ | Absturzberichte |
[logs]
keep_days = 14
error_days = 30
audit_days = 90
dumps_keep = 30
compress = true
archive = "/srv/archiv/mutecloud"Ab dem zweiten Tag werden Logdateien komprimiert. Was seine Aufbewahrungszeit überschreitet,
wandert nach archive, ohne diese Einstellung wird es gelöscht. Von den Absturzberichten bleiben
die neuesten dumps_keep erhalten.
Ein Absturzbericht enthält die letzten 600 Konsolenzeilen, latest.log und crash-reports des
Servers sowie meta.json mit Gruppe, Node, Port, Arbeitsspeicher, Exit-Code und Zeitstempeln. Die
eigenen Logs der Server bleiben in ihren Ordnern.