MuteBefehl Wiki

Dashboard, alerts and metrics

Web interface, webhooks, Prometheus and log files.

Dashboard

The dashboard is a web interface served by the cloud itself. It is off by default and listens only on 127.0.0.1:8780.

dashboard on
dashboard password <new password>
dashboard

The password needs at least eight characters. All changes apply from the next start of the cloud; dashboard shows the current state and, if something holds the dashboard back, the reason as well.

There are two ways to log in. If the player name field is left empty, the shared password applies, and whoever knows it may do everything the dashboard offers. With a player name, that user's own password from user password <name> <password> applies, and they may only do what their roles in access.toml allow. A forgotten password can only be reset in the console.

SectionContent
Overviewgroups with start, restart, stop, edit and, for static groups, backup; creating groups; servers with log, drain, restart and stop
Playerswho is online, on which server and since when
Usersaccounts with roles, roles with rights, existing tokens
Ranksplayer ranks and who holds which
Backupsthe last twenty backups with restore
Networkbroadcast, maintenance and exceptions
Consoleenter commands, with exceptions

The page refreshes every three seconds. The dashboard console deliberately lacks the commands that change access itself or stop the cloud: stop, groups <name> delete, service <name> screen, dashboard, alerts, token, update, data, audit, addon and publish. Every action in the dashboard is recorded in audit.log with source dashboard.

Reachable from outside

The cloud accepts an address outside the machine only under certain conditions; otherwise it falls back to 127.0.0.1 and states the reason.

AddressRequirement
127.0.0.1none
private network or Tailscalea password is set
public addresspassword, domain and port 443 for Let's Encrypt
behind your own reverse proxypassword and allow_insecure = true
dashboard bind 0.0.0.0:443
dashboard domain cloud.example.com
dashboard contact [email protected]

The domain's A record must point to the machine. The cloud obtains the certificate itself and stores it under cache/acme; on port 80 it then redirects to https. dashboard staging on uses the Let's Encrypt staging environment for testing, whose certificates no browser accepts. An ordinary user may not open ports below 1024; the cloud prints the matching setcap command for that.

Further fields exist only in the file:

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

session_hours sets how long a login stays valid. trusted_proxies lists the reverse proxies whose X-Forwarded-For the cloud trusts, so that the lockout after failed attempts hits the correct address.

After five failed logins from one address within a minute, that address is locked for a minute; after twenty across all addresses combined, login is locked for everyone. In both cases a login-blocked alert is sent.

Alerts

The cloud reports events to a Discord webhook or to any other URL that accepts JSON.

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 enables alerts at the same time, alerts test sends a test message and shows the other side's response. Without alerts events all events are sent.

EventLevelWhen
service-crashederrora server ends unexpectedly, with the path to the crash report
service-start-failederrora server cannot be started
service-hangingerrorthe watchdog considers a server frozen
group-pausederrorthree crashes in a row, the group pauses for a minute
backup-failederrora scheduled backup failed
node-losterrora worker lost its connection
node-backinfoa node has connected
memory-tightwarningno node has enough memory for the next server
login-blockedwarningtoo many wrong logins or tokens
rollout-waitingwarninga changed template is waiting for approval
update-availableinfoa new version is available
cloud-started, cloud-stoppedinfothe cloud starts or stops

The same event for the same server, group or node is sent only once within quiet minutes; alerts quiet 0 turns this off. URLs other than Discord receive a flat JSON with event, level, node, subject, detail and text.

Metrics

GET /metrics on the API address returns Prometheus text. The token needs the right groups.view; a dedicated one for Prometheus is quickly created:

token create prometheus groups.view
prometheus.yml
scrape_configs:
  - job_name: mutecloud
    authorization:
      credentials: <token>
    static_configs:
      - targets: ["127.0.0.1:8770"]
MetricLabelsContent
mutecloud_upalways 1
mutecloud_build_infoversion, nodecloud version
mutecloud_memory_mbnode, artbudget and belegt (used)
mutecloud_nodesnode, rolle1 for every connected node
mutecloud_playersplayers in the network
mutecloud_group_servicesgrupperunning servers
mutecloud_group_scalegruppe, grenzemin and max
mutecloud_group_playersgruppeplayers in the group
mutecloud_group_maintenancegruppe1 in maintenance
mutecloud_service_playersserver, gruppe, nodeplayers on the server
mutecloud_service_memory_mbas aboveallocated memory
mutecloud_service_rss_mbas abovememory actually used
mutecloud_service_cpu_percentas aboveCPU load
mutecloud_service_uptime_secondsas aboveuptime
mutecloud_service_readyas above1 when it accepts players
mutecloud_service_stateszustandnumber of servers per state
mutecloud_rollout_pendinggruppe, freigabeservers on an old template

Log files

logs shows which log files exist and how long they are kept.

FileContent
logs/mutecloud.<date>.logeverything, new each day
logs/fehler.<date>.logwarnings and errors only
audit.logwho ran what from outside
update.logevery installed version
dumps/<server>-<time>/crash reports
mutecloud.toml
[logs]
keep_days = 14
error_days = 30
audit_days = 90
dumps_keep = 30
compress = true
archive = "/srv/archiv/mutecloud"

From the second day on, log files are compressed. Whatever exceeds its retention moves to archive; without that setting it is deleted. Of the crash reports, the newest dumps_keep are kept.

A crash report contains the last 600 console lines, the server's latest.log and crash-reports, and meta.json with group, node, port, memory, exit code and timestamps. The servers' own logs stay in their folders.

On this page