Server Controls and Logs
Watch live server health, broadcast to players, drain or restart the server, schedule a shutdown, and search or tail the production logs.
10 min read
The Live section of a game page#
Once a game is live, its sidebar gains a Live group with four entries. Three of them are covered here; the fourth is documented with moderation.
| Entry | URL | What it is for | Who sees it |
|---|---|---|---|
| Overview | /dashboard/{gameId}/overview | Health of the production server: players online, tick rate, CPU, memory, uptime, plus history charts | Owner, Developer, Moderator, Support |
| Server | /dashboard/{gameId}/server | Operator controls: broadcast banner, drain mode, maintenance message, restart and shutdown | Owner, Developer |
| Players | /dashboard/{gameId}/players-online | Who is connected right now, kick, and the player activity feed | See Players and moderation |
| Logs | /dashboard/{gameId}/logs | Live tail and historical search over the server's structured log feed, with NDJSON export | Owner, Developer, Moderator, Support |
Visibility follows the capability matrix in Members, roles and staff: Overview and Logs need server.read, Server needs server.shutdown. Opening a gated URL directly shows an "Insufficient permissions" message naming the missing capability.
All of these pages talk to the production server only. Test and beta servers report nothing here; use the editor's log viewer (or the read_server_logs MCP tool) for those.
How the server and the dashboard talk#
The game server polls the platform every 5 seconds for its control state and posts health telemetry on the same cadence. Everything on these pages flows through that loop:
- A control change you make (drain, banner, shutdown) is picked up by the server on its next poll, so expect up to about five seconds before players see it.
- The Overview page refreshes its numbers every 5 seconds while the tab is visible.
- Log lines are shipped to the platform in one-second batches.
Every button on the Server page writes an entry to the game's Audit log with the action name (for example server.drain, server.announce, server.shutdown_scheduled), so your team can always see who did what and when.
Overview: server health#
The header shows a status pill computed from the latest snapshot:
| Pill | Condition |
|---|---|
| Healthy | Tick rate at least 18 Hz and CPU under 70% |
| Degraded | Tick rate at least 15 Hz and CPU under 85% |
| Critical | Anything worse than Degraded |
| No telemetry | The last snapshot is more than 30 seconds old |
| Waiting… | No snapshot has been received yet |
Below it, five tiles report the current values:
| Tile | Shows |
|---|---|
| CCU | Connected players, as online / capacity when the server reports a capacity, with a "% full" line |
| Tick rate | Server loop frequency in Hz, with the 95th-percentile tick time in milliseconds |
| CPU | Process CPU percentage |
| Memory | Resident memory in MB, with the count of generation-2 garbage collections |
| Uptime | Time since the server process started, with inbound network throughput |
A freshly started server posts its first snapshot within about ten seconds; until then the page says "No telemetry has been received yet."
History charts#
The History card draws four area charts — Concurrent users, Tick rate (Hz), CPU (%) and Memory (MB) — over a selectable window:
| Range button | Window | Bucket |
|---|---|---|
| Last 1h | Previous hour | 1 minute |
| Last 24h | Previous day | 5 minutes |
| Last 7d | Previous week | 1 hour |
Hover a chart for the exact value at a point in time. A range with no samples shows "No data yet for this range." Health samples are retained for roughly a month; the 7-day view is the longest the page offers.
Server: operator controls#
The Server controls page opens with a status card and four control cards.
Status card#
| Field | Meaning |
|---|---|
| State | Running (accepting players), Draining (refusing new joins) or Stopped |
| Live banner | The broadcast currently shown to players, and whether it auto-hides or is "persistent — until cleared" |
| Maintenance message | The active maintenance text and, if set, its until time with a countdown |
| Restart scheduled / Shutdown scheduled | The booked time and a countdown |
| Last changed by | The account that made the last change, and when |
Broadcast to players#
Pushes a banner above every online player's chatbox. Players receive it within about five seconds.
- Type the message (up to 200 characters in the form).
- Optionally tick Auto-hide after and enter a number of minutes (default 5). Leave it unticked for a banner that stays until you clear it.
- Click Send banner. The message appears in the status card as Live banner.
- Click Clear banner to remove it from every client.
A persistent banner is re-sent to players who log in after it was posted; a timed banner is not, because its countdown would already be stale for them. Timed banners are capped at 24 hours.
Drain mode#
Drain new connections stops the server accepting new logins while everyone already in the game keeps playing. New connection attempts are rejected with your maintenance message (or a default one). The state pill switches to Draining and the button becomes Resume accepting players.
Use drain before a planned shutdown so the population winds down on its own, or while you investigate a problem without kicking anyone.
Maintenance message#
The maintenance text is shown on the game's launcher card and is the rejection message players see while the server is draining or shutting down.
- Enter the message (the API accepts up to 500 characters).
- Optionally set Until (optional). The message clears itself once that time passes; a window longer than 72 hours is shortened to 72 hours.
- Click Set message (or Update message if one is already active). Clear removes it immediately.
Restart and shutdown#
Restart stops the server and brings it back online right after. Shutdown stops it and leaves it offline until you bring it back. Both share a When selector:
| Option | Behavior |
|---|---|
| Now | Fires immediately. The button reads Restart now / Shutdown. |
| In minutes | Fires after N minutes (default 15). The button reads Schedule restart / Schedule shutdown. |
| At a time | Fires at a date and time you pick. Times in the past are rejected. |
For a scheduled time, the card previews the warning timeline — T-10min warning, T-5min warning, T-1min warning and Restart fires — and the status card shows the countdown. Scheduled restarts and shutdowns are independent: you can cancel either with Cancel scheduled restart or Cancel scheduled shutdown.
What players experience:
- Immediate restart or shutdown — the server exits at its next poll, within about five seconds. Player saves flush during the normal shutdown sequence; there is no countdown banner. The platform also force-stops the container 45 seconds later as a safety net in case the in-game module did not react. After a restart the platform brings the container back up.
- Scheduled shutdown — the server broadcasts warnings at the 10-, 5- and 1-minute marks, stops accepting new connections at the end, shows a 30-second shutdown countdown with your maintenance message as the reason, saves every connected player and exits.
- Scheduled restart — the server broadcasts the same 10-, 5- and 1-minute warnings so players can wrap up.
To shut down:
- Choose When.
- Click Shutdown (or Schedule shutdown). A dialog titled Shut down server? explains what will happen.
- Type the game name exactly as shown and click Shut down now (or Schedule shutdown).
An immediate restart asks for a simple confirmation instead of the typed name.
While the server is Stopped, the card collapses to a single Bring back online button. Bringing it back also clears any scheduled restart.
Recommended sequence for planned maintenance#
- Set a Maintenance message with an Until time so the launcher explains the downtime.
- Send banner to tell players in-game what is coming.
- Choose In minutes (for example 15) and Schedule shutdown or Schedule restart.
- Optionally Drain new connections so nobody joins in the last minutes.
- After the work, Bring back online (if you shut down), Resume accepting players, and Clear the maintenance message.
Server activity timeline#
The History tab of the game page (not the Live section) has a Server Activity timeline above the version history. It records lifecycle events rather than operator clicks: Launched, Brought online, Taken offline, Unexpected outage, Recovered, Update deployed, Hotfix, Rolled back, Hosting canceled, Hosting resumed and Offline (billing), each with a timestamp and an optional message. Events the platform generated on its own carry an auto tag. Use Load older events to page back. For what triggers deploy-related events, see Updates, patches and rollback.
Player activity feed#
The Players page in the Live group ends with an Activity table: a structured stream of recorded player actions, distinct from the raw server logs. The same feed is available on its own at /dashboard/{gameId}/activity (it needs players.read). Filter it by Type, by exact Player id, and by From / To; 200 events load at a time, with Load older entries at the bottom. Each row links the player name to their profile.
| Type filter | Event |
|---|---|
| Joins / Leaves | player.join, player.leave (with the leave reason) |
| Chat | player.chat with the message |
| Deaths / PK kills | player.death (with what killed them), player.killed_by_player |
| Level ups | player.level_up with the skill and new level |
| Items acquired / Items dropped | player.item_acquired, player.item_dropped with item id, amount and source |
| Trades | player.traded with the other player |
| In-game purchases | player.purchase with the item, shop and coin cost |
Activity is retained for about 30 days, which is also the window the players source in the Data browser and the retention charts in Analytics draw from. Moderation actions on what you find here are covered in Players and moderation.
Logs#
The Server logs page combines a live tail with a searchable history of everything the server's logger emitted.
Reading the table#
Each row shows the time (to the millisecond), the level (debug, info, warn, error), a tag naming the subsystem that wrote the line, and the message. Long messages are truncated unless you tick Wrap long lines. Right-click any row for:
- Pin pattern — adds the first 60 characters of the message to a Pinned list; matching text is highlighted in every row. Pins are saved in your browser. Click a pinned chip to remove it.
- Copy message — copies the full message to the clipboard.
Filters#
| Filter | Behavior |
|---|---|
| Levels | Toggle debug, info, warn, error. At least one stays selected. |
| Tag | Case-insensitive substring match on the tag (for example Combat). |
| Search | Case-insensitive substring match on the message (for example NullReferenceException). |
| From / To | Time window. Required for export. |
Filters apply to both the stored history and the live stream. History loads 200 entries at a time; scroll to the bottom (or click Load more) to fetch older ones. The counter above the table shows how many entries match and whether older ones are available.
Live tail#
Live: ON opens a streaming connection and prepends new lines as they arrive; the badge next to it reads Connecting…, Live, Disconnected or Idle (when live is off). The browser keeps at most 5,000 buffered lines. If the connection drops, the page retries with increasing delays up to five times and then shows "Live tail disconnected — click to retry". A role without log access is refused and live is switched off.
Export#
- Set From and To.
- Click Export NDJSON.
Your browser downloads logs-{gameId}-{from}-to-{to}.ndjson, one JSON object per line, covering the whole window regardless of the level, tag and search filters. A busy server can produce a very large file for a 24-hour window.
What is kept, and what is not#
- The server ships
infoand above by default, so thedebugtoggle is usually empty. - History is retained for about two weeks. Export anything you need to keep.
- Lines written by platform modules carry tags such as
ControlPlane,DataSnapshot,PlayerAutosave,ActivityLoggerandTelemetryModule. TheDataSnapshottag is where backup problems are reported — see Data browser. - Only entries that go through the server's structured logger reach this page. Plain console output (including the
Log()helper on a module) goes to the container console, which you can read from the editor instead.
With AI (MCP)#
read_server_logs tails the container console of a deployed server (test by default; pass mode: "live" or "beta") and returns up to 2,000 recent lines with contains, exclude and min_level filters. It reads the raw console stream, so it also shows unlevelled output that the dashboard's structured feed does not carry. get_live_status and get_deploy_status report the deployment state that the dashboard's header badges summarize.
