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>
dashboard

Das 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.

BereichInhalt
ÜbersichtGruppen mit Starten, Neustarten, Stoppen, Bearbeiten und bei statischen Gruppen Sichern; Gruppen anlegen; Server mit Log, Leerlaufen lassen, Neustarten und Stoppen
Spielerwer online ist, auf welchem Server und seit wann
BenutzerKonten mit Rollen, Rollen mit Rechten, vorhandene Tokens
RängeSpielerränge und wer welchen hat
Sicherungendie letzten zwanzig Backups mit Wiederherstellen
NetzwerkDurchsage, Wartung und Ausnahmen
KonsoleBefehle 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.

AdresseVoraussetzung
127.0.0.1keine
privates Netz oder Tailscaleein Passwort ist gesetzt
öffentliche AdressePasswort, Domain und Port 443 für Let's Encrypt
hinter deinem eigenen Reverse ProxyPasswort 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:

mutecloud.toml
[dashboard]
session_hours = 12
trusted_proxies = ["127.0.0.1"]
allow_insecure = false

session_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 off

alerts webhook schaltet die Warnungen gleichzeitig ein, alerts test schickt eine Testnachricht und zeigt die Antwort der Gegenseite. Ohne alerts events werden alle Ereignisse gesendet.

EreignisStufeWann
service-crashedFehlerein Server endet unerwartet, mit dem Pfad zum Absturzbericht
service-start-failedFehlerein Server lässt sich nicht starten
service-hangingFehlerder Watchdog hält einen Server für eingefroren
group-pausedFehlerdrei Abstürze hintereinander, die Gruppe pausiert eine Minute
backup-failedFehlerein geplantes Backup ist fehlgeschlagen
node-lostFehlerein Worker hat seine Verbindung verloren
node-backInfoeine Node hat sich verbunden
memory-tightWarnungkeine Node hat genug Arbeitsspeicher für den nächsten Server
login-blockedWarnungzu viele falsche Anmeldungen oder Tokens
rollout-waitingWarnungeine geänderte Vorlage wartet auf Freigabe
shield-attackWarnungdas Schutzschild lehnt innerhalb einer Minute viele Verbindungen ab
shield-blockWarnungdas Schutzschild hat automatisch Adressen gesperrt
update-availableInfoeine neue Version ist verfügbar
cloud-started, cloud-stoppedInfodie 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.view
prometheus.yml
scrape_configs:
  - job_name: mutecloud
    authorization:
      credentials: <token>
    static_configs:
      - targets: ["127.0.0.1:8770"]
MetrikLabelsInhalt
mutecloud_upimmer 1
mutecloud_build_infoversion, nodeVersion der Cloud
mutecloud_memory_mbnode, artbudget und belegt
mutecloud_nodesnode, rolle1 für jede verbundene Node
mutecloud_playersSpieler im Netzwerk
mutecloud_group_servicesgruppelaufende Server
mutecloud_group_scalegruppe, grenzemin und max
mutecloud_group_playersgruppeSpieler in der Gruppe
mutecloud_group_maintenancegruppe1 bei Wartung
mutecloud_service_playersserver, gruppe, nodeSpieler auf dem Server
mutecloud_service_memory_mbwie obenzugewiesener Arbeitsspeicher
mutecloud_service_rss_mbwie obentatsächlich genutzter Arbeitsspeicher
mutecloud_service_cpu_percentwie obenCPU-Last
mutecloud_service_uptime_secondswie obenLaufzeit
mutecloud_service_readywie oben1, wenn er Spieler annimmt
mutecloud_service_stateszustandAnzahl der Server pro Zustand
mutecloud_rollout_pendinggruppe, freigabeServer auf einer alten Vorlage
mutecloud_shield_*je nach WertKennzahlen des Schutzschilds

Logdateien

logs zeigt, welche Logdateien es gibt und wie lange sie aufbewahrt werden.

DateiInhalt
logs/mutecloud.<date>.logalles, jeden Tag neu
logs/fehler.<date>.lognur Warnungen und Fehler
audit.logwer was von außen ausgeführt hat
update.logjede installierte Version
dumps/<server>-<time>/Absturzberichte
mutecloud.toml
[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.

Auf dieser Seite