Server metrics
The server Metrics screen is a history of how a host has been doing — CPU, memory, disks, network, and whatever else that machine actually has (GPUs, extra filesystems, ingress, a database proxy). It is statistical and disposable: good for spotting saturation, stalls, and hardware faults. It is not a billing ledger or an audit trail.
What each chart means
This section is the operator glossary. Storage, retention, and the wire contract live in Server metrics architecture and Metrics operations.
How sampling works
A connected Linux daemon posts one sample about every 60 seconds. The first sample after connect is immediate (gauges such as memory available). Rates (CPU busy, disk bytes/s, network) appear about two seconds later, once the daemon has two readings to subtract.
| Range on the screen | What you get |
|---|---|
| 5 minutes / 10 minutes | Live mode — 10 second samples for up to 60 minutes, then it falls back to 1 minute |
| 1 hour / 6 hours | 1 minute refresh |
| 24 hours | 5 minute refresh |
| 7 / 30 / 90 days | Historical buckets; no auto-refresh |
Live-mode samples are streamed to the chart and never stored: once the lease ends, history for that window is the normal one-minute data. Every chart group is collected on every sample — there is no slower cadence for any group.
Charts are not wall-clock real time below that ~60 second baseline. A gap in the line is a missing sample, not zero usage — amber bands mark those holes. A solid vertical divider is a topology change (a NIC, disk, GPU, or sensor was added, removed, or replaced). The line breaks there on purpose so two different devices never look like one continuous trend.
Metrics are Linux-only. A non-Linux server shows an unsupported-OS state instead of empty charts.
Overview tiles
The five numbers above the charts are the latest values, not a plotted series:
| Tile | What it is |
|---|---|
| CPU utilization | Share of CPU time that was busy (host.cpu.busyPercent). See CPU. |
| Memory used | Used RAM as a percent of capacity (derived from used bytes). See Memory. |
| Hosting storage used | Used percent of the filesystem marked for hosting, or the root filesystem if none is. See Storage. |
| Running / blocked | Tasks on a CPU right now vs tasks waiting on I/O. See Processes. |
| Uptime | Time this server has been connected in the selected range, from connection history — not a metrics-store series. History only; the Servers list is what says whether the host is online right now. See Uptime. |
Uptime
The Uptime tile is not a plotted series. It is time this server was connected during the selected range, from the connection-status history. That history is best-effort. Whether the host is online right now is the Servers list (Postgres liveness), never this tile.
A chart is missing
Most groups only appear when that hardware or sidecar exists on the host. A VM with no GPU has no GPU charts, and no Physical signals group at all. A host whose kernel does not export Pressure Stall Information has no PSI charts. CPU detail and Memory detail are reported by every Linux host at every tier — they are not a capability to enable. The one group hidden by license tier rather than by presence is Docker: on an S1 license the console shows a one-line notice in its place, since the Docker breakdown is granted from S2 (see License tiers). Self-hosted servers see every group their hardware supports.
Empty is not the same as zero. A metric the host cannot measure stays blank; a metric that is legitimately zero (no swap configured, no retransmits) plots at 0%.
Pressure Stall Information (PSI)
PSI is the Linux kernel's answer to “are tasks waiting?” It is the most important number on the Metrics screen when CPU busy % looks fine but the machine still feels slow.
Each PSI reading is a percent of that sample's wall clock during which tasks were stalled on the resource — not how busy the resource was, and not a load average. The daemon derives it from the kernel's cumulative stall-time counter (total in /proc/pressure/{cpu,memory,io}), so a 20% Some value means tasks spent a fifth of that minute waiting. TurboPanel does not store the kernel's avg10 / avg60 / avg300 rolling averages.
Busy percent vs pressure
Busy percent is how much of the CPU (or disk) was occupied. Pressure is how often work waited for that resource. A host can be 40% busy and still have high CPU pressure if too many tasks are queued behind too few cores. It can also be 95% busy with almost no pressure if the work is well matched to the hardware.
Linux tracks three resources. TurboPanel collects five percentages from them:
| Resource | Chart | Some | Full |
|---|---|---|---|
| CPU | CPU pressure (PSI) | host.cpu.pressureSomePercent — at least one task waited for a CPU | not collected — a CPU is never completely stalled the way memory and disk can be (some task is always running if there is work) |
| Memory | Memory pressure (PSI) | host.memory.pressureSomePercent — at least one task waited for RAM (reclaim, compaction, or swap) | host.memory.pressureFullPercent — every non-idle task waited — the machine stalled |
| I/O | I/O pressure (PSI) | host.storage.ioPressureSomePercent — at least one task waited on storage | host.storage.ioPressureFullPercent — every non-idle task waited on storage |
Some answers “is anyone stuck?” Full answers “did the whole machine stop?” A rising Some line is contention. A Full line that leaves zero is a stall — memory thrashing or a disk that cannot keep up.
How to read a PSI chart
Rules of thumb, not product alert thresholds:
| What you see | What it usually means |
|---|---|
| Flat near 0% | The resource is keeping up |
| Some in the low single digits, brief spikes | Normal under bursty load |
| Some in double digits for minutes | Saturation — tasks are regularly waiting |
| Some high while busy % is only moderate | Mismatch: too many threads, a few pegged cores, or a noisy neighbor (check Cores saturated and steal %) |
| Memory or I/O Full above 0% for more than a blip | Severe — the host stalled. Pair memory Full with swap I/O; pair I/O Full with disk latency |
PSI needs a kernel that exports /proc/pressure/ (mainstream Linux since 4.20; Debian 13 does). If those files are missing — some older kernels, some containers — the PSI charts hide instead of plotting zero. A missing chart is not the same as 0%.
Catalog
CPU
Busy modes, PSI, saturated cores, processes, and CPU diagnostics
Memory
Used vs cached, swap, PSI, paging, and memory diagnostics
Storage
I/O PSI, disk throughput and latency, root filesystem
Storage usage
Hosting, backup, Docker, and log usage with free space; managed-database census
Docker
Image layers, containers, volumes, build cache, and what a prune reclaims (S2+)
Network
TCP retransmits, softnet drops, kernel tables, extra NICs
GPU
Utilization, memory, PCIe, throttle
Filesystems
Non-root mounts — available bytes and free inodes
Block devices
Per-disk throughput, IOPS, latency, utilization, queue
Physical signals
Board, CPU package, drive, and GPU temperature and power sensors
Ingress (Caddy)
Site Caddy request rates, status classes, latency percentiles and buckets
Router (Traefik)
Shared hosting router — backends reachable, retries, 5xx, config reloads, TLS expiry
Database proxy
ProxySQL queries, latency, connection churn, rejections, backends
Events
OOM, disk faults, NIC flaps, GPU Xid, clock sync, and more
Stable links
Each heading below uses the same id as the console chart. A later console click can open /docs/metrics/<group>#<chart-id>.
| Console chart id | Docs |
|---|---|
cpu-modes | CPU utilization |
cpu-pressure | CPU pressure (PSI) |
cpu-saturated-cores | Cores saturated |
cpu-processes | Processes |
cpu-detail-frequency | CPU frequency |
cpu-detail-scheduling | Context switches & interrupts |
cpu-detail-forks | Process forks |
cpu-detail-irq | IRQ time |
memory-breakdown | Memory breakdown |
memory-percent | Memory used |
swap-bytes | Swap used |
swap-percent | Swap used % |
memory-pressure | Memory pressure (PSI) |
memory-swap-io | Swap I/O |
memory-major-faults | Major page faults |
memory-detail-primary | Free & cached memory |
memory-detail-slab | Slab memory |
memory-detail-dirty | Dirty & writeback pages |
memory-detail-other-gauges | Shared memory |
memory-detail-commit | Committed memory |
memory-detail-reclaim | Page reclaim |
memory-detail-compaction | Compaction stalls |
storage-io-pressure | I/O pressure (PSI) |
disk-throughput | Disk throughput |
disk-latency | Disk latency |
root-filesystem-bytes | Root filesystem available |
root-filesystem-percent | Root filesystem used |
root-filesystem-inodes | Root filesystem free inodes |
managed-storage-hosting | Hosting root |
managed-storage-backup | Backups |
managed-storage-docker | Docker data root |
managed-storage-logs | Logs |
managed-storage-engines | Managed databases |
managed-storage-connections | Managed database connections |
managed-docker-layers | Image layers |
managed-docker-containers | Container writable layers |
managed-docker-volumes | Volumes |
managed-docker-build-cache | Build cache |
managed-docker-counts | Object counts |
network-retransmit | TCP retransmit rate |
network-softnet-drops | Softnet drops |
kernel-resources | Kernel resource usage |
router-backend-requests | Backend requests |
router-backend-latency | Backend latency |
router-backends | Backends & services |
router-connections | Open connections |
router-config | Config reloads |
router-config-age | Since last config reload |
router-tls-expiry | Soonest TLS expiry |
Per-device charts (GPU, extra NICs, filesystems, block devices, sensors, ingress, ProxySQL) use the group page, not a per-device heading.
Related
- Server metrics architecture — contract, storage backends, cost model
- Metrics operations — retention, capability plan, troubleshooting
- License tiers — what each tier watches, and why S1 shows a Docker notice
Last updated on