Architecture & OperationsSystem Health Screen Reference
On this page0

Unfamiliar word? See Glossary: words used in these docs. Looking for the tasks in order? Begin at Start Here.

Reference

Included in: All plans. Which Plan Includes What

System Health Screen Reference

Every gauge, card and status on System → System Health, the rule that sets it, and the read behind it.

Every Element On The Screen

Labels are the words on the screen. The response field each one is drawn from is in the technical part below.

Header

On screenWhat it means
N/M UPContainers that are running and not unhealthy, out of all containers listed.
N UNHEALTHYShown only when at least one container is unhealthy.
next in NsSeconds until the next automatic reading. The screen reads every 30 seconds.
Refresh nowReads at once and restarts the 30-second countdown. Because of the 25-second server cache, the figures may be the same reading.
LIVE / STALELIVE while the last reading succeeded. STALE when it failed: the figures on screen are then the previous reading, and "Could not reach the health service." is shown.

Gauges

On screenWhat it means
CPUShare of all processor cores in use, measured over a 200-millisecond sample. Below it: the core count and the 1, 5 and 15-minute load averages. If the sample cannot be taken, the gauge shows the 1-minute load per core instead.
MEMORYMemory in use as a share of the total, with used and total below.
SWAPSwap in use as a share of the total. Reads "no swap configured" when the server has none.
DISKSpace used on the root filesystem. Reads "unavailable" when it cannot be measured.
Gauge colourGreen below 70%, amber from 70%, red from 90%. The same bands colour the CPU and memory figures in the container table.

Heavy-load banner

On screenWhat it means
The VPS is under heavy load.Shown when CPU, memory or disk is at 90% or more, or swap is at 50% or more. It adds one sentence per cause: "Memory is nearly exhausted.", "Heavy swap use means RAM pressure — the box will feel slow.", "CPU is saturated." or "Disk is almost full."

Containers card

On screenWhat it means
Healthy / DegradedDegraded when at least one container is unhealthy, otherwise Healthy.
unhealthyA container whose status reports unhealthy, restarting or dead, or one that is not running and did not exit cleanly (exit code other than 0).
runningA container that is running and is not unhealthy.
completedEverything else: one-time jobs that ran and exited with code 0. Listed as "exited · one-time".
View all NOpens the table: CONTAINER (short name, image below), STATUS, CPU and MEM. Click CONTAINER, CPU or MEM to sort; the default is highest CPU first. Memory excludes file cache and is also shown as a share of the container’s own limit.
Docker socket warningWhen the container list cannot be read, a warning says so and the card lists no containers, so its Healthy chip means nothing then. The gauges are still live.

App version card

On screenWhat it means
Up to dateThe update check answered and nothing newer is waiting.
N behindN newer releases exist. Amber, or red when at least one of them is a security release.
UnknownThe check could not run or has not reported yet. The reason is printed under the title.
Checking…The first read has not come back yet.
Running, DeployedThe release name and the first seven characters of its commit, and when it was deployed.
LicensesA link to the open-source notices bundled with the app.

Backups (same card)

On screenWhat it means
Restore pointsHow many restore points are listed and their total size. Reads "could not load" after a failed read.
Last backupThe newest modified time among the restore points.
Off-box copies"configured ✓" when an off-box destination is set, "0 — local only" when it is not.
View backups →Opens System → Backups & Recovery.

What This Screen Does Not Do

  • The read sends no notification. The heavy-load banner and the Degraded chip are drawn by the screen from the latest reading, so they exist only while someone has the screen open.
  • The read keeps no history. Each reading replaces the last one in memory and is not written to the database.
  • It cannot restart a service. Updates are applied, and the automatic schedule is set, on System → Updates; restores are run from System → Backups & Recovery (see Backup, Restore & Updates).

What each kind of outage looks like from the API and from this screen is on Failure Modes.

If something here is not working as you expect, start with When something goes wrong.

The plain explanation is above. This part is for IT and developers: the exact settings, permission names, API addresses and data fields behind it. Closed: select the heading above to open it. While it is closed, your browser’s find-on-page (Ctrl+F or Cmd+F) does not search this part.

The menu item is shown to administrators and to anyone whose role includes view_system. The same permission is required by every read below, so a person who cannot see the screen cannot call its API either.

The Reads Behind The Screen

The screen makes four reads and no writes. All four are answered by the compliance service and are gated on view_system alone, not on a plan.

MethodPathPurposeAuth
GET/api/v1/compliance/reports/system-healthServer load and the container list. Feeds the four gauges, the Containers card, the header chips and the heavy-load banner. The answer is cached on the server for 25 seconds.view_system
GET/api/v1/compliance/reports/patch-statusThe running release and how far behind it is. Feeds the App version card. The screen re-reads it every 5 minutes, or after 15 seconds when a read failed.view_system
GET/api/v1/compliance/reports/backupsThe restore points. Feeds Restore points and Last backup.view_system
GET/api/v1/compliance/reports/update-statusThe host updater agent’s status, including whether an off-box destination is configured. Feeds Off-box copies.view_system

# $ZX_TOKEN is a personal API token whose owner holds view_system.

curl -H "Authorization: Bearer $ZX_TOKEN" https://<your-instance>-api.zonitix.com/api/v1/compliance/reports/system-health

# 200

{

"at": "2026-10-10T09:15:02.118Z",

"host": { "cpuCores": 4, "cpuPct": 12.4, "load1": 0.5, "load5": 0.4, "load15": 0.4, "loadPct": 12.5,

"memTotal": 8323072000, "memUsed": 5120000000, "memPct": 61.5,

"swapTotal": 0, "swapUsed": 0, "swapPct": 0,

"disk": { "totalBytes": 160000000000, "usedBytes": 48000000000, "usedPct": 30 } },

"dockerAvailable": true,

"containerCount": 2, "runningCount": 2, "unhealthyCount": 0,

"containers": [ { "name": "…", "image": "…", "state": "running", "status": "Up 3 hours (healthy)",

"cpuPct": 1.2, "memBytes": 210000000, "memPct": 20.5, "unhealthy": false }, … ]

}

# The values above are an illustration of the shape, not a measurement.

  • Sizes are bytes; host percentages are 0 to 100 with one decimal place. A container’s cpuPct is a share of one core, so it can exceed 100 on a multi-core server. host.cpuPct is null when the sample could not be taken, and host.disk is null when the disk could not be measured.
  • Containers are sorted by cpuPct, highest first. Only the containers of your own instance are listed.
  • runningCount counts every running container, including one that is failing its health check and is therefore also in unhealthyCount. The screen counts from the rows instead, so its three numbers never overlap.
  • When the container list cannot be read the reply is still 200, with dockerAvailable: false, an empty containers array and the host figures filled in.
  • Caching. A reading is reused for 25 seconds, and callers that arrive while one is being taken share it. Polling faster than that returns the same reading.

Response Field Behind Each Element

This table gives the response field each element on the screen is drawn from. What each element means is in the plain part above, under Every Element On The Screen; fields under host and containers are in the reply shown above.

AreaOn screenDrawn from
HeaderN/M UPcontainers[]
HeaderN UNHEALTHYcontainers[].unhealthy
Headernext in Nsset by the screen
HeaderRefresh nowset by the screen
HeaderLIVE / STALEset by the screen
GaugesCPUhost.cpuPct, host.loadPct, host.cpuCores, host.load1 / load5 / load15
GaugesMEMORYhost.memPct, host.memUsed, host.memTotal
GaugesSWAPhost.swapPct, host.swapUsed, host.swapTotal
GaugesDISKhost.disk.usedPct, usedBytes, totalBytes
GaugesGauge colourset by the screen
Heavy-load bannerThe VPS is under heavy load.host.cpuPct, memPct, disk.usedPct, swapPct
Containers cardHealthy / Degradedcontainers[].unhealthy
Containers cardunhealthycontainers[].unhealthy, status
Containers cardrunningcontainers[].state
Containers cardcompletedcontainers[].state, status
Containers cardView all Ncontainers[].name, image, state, cpuPct, memBytes, memPct
Containers cardDocker socket warningdockerAvailable: false
App version cardUp to dateupToDate, behind
App version cardN behindbehind, securityBehind
App version cardUnknownerror
App version cardChecking…set by the screen
App version cardRunning, Deployedcurrent.tag, current.commit, current.deployedAt
App version cardLicensesset by the screen
Backups (same card)Restore pointsthe backups list
Backups (same card)Last backupmodifiedAt
Backups (same card)Off-box copiesbackupConfig.offboxConfigured
Backups (same card)View backups →set by the screen

Related reference