Resource metrics (CPU, RAM, disk)
Read CPU, RAM and disk metrics from the Servor agent on connected servers and set thresholds to catch resource problems early.
For any server you've connected, Servor collects resource metrics — CPU, RAM and disk usage — straight from the agent running on the machine. This gives you a live picture of a server's health next to its uptime, so you can spot a disk filling up or a runaway process before it becomes an outage.
Resource metrics need a connected server. If you haven't installed the agent yet, start with add a server. Monitoring a plain URL (an HTTP monitor) doesn't collect these — they come from the machine itself.
Where to find them
Open a server from the Servers list — open Servers in Servor — to see its resource metrics: current usage and trends over time. Because the metrics come from the agent, the server must show as connected. If it's unreachable, metrics stop updating — see repair the agent.
Read-only viewers can see metrics
Viewing metrics is read-only, so anyone on the team — including the viewer role — can look. Running commands to investigate needs write access and an unlocked vault.
What each metric tells you
| Metric | What it measures | Watch for |
|---|---|---|
| CPU | Processor load, as a % of capacity | Sustained high usage — an overloaded or runaway process |
| RAM | Memory in use vs. total | Consistently near 100% — risk of swapping or the OOM killer |
| Disk | Storage used vs. available | Filling up — a full disk breaks apps, logs and databases |
CPU
CPU usage shows how hard the processor is working. Brief spikes are normal — a build, a backup, a traffic burst. Sustained high CPU is the signal: it means the machine can't keep up, requests slow down, and the service may drift into degraded before going down.
RAM
Memory shows how much RAM is in use. When a machine runs consistently near full, the OS starts swapping to disk (slow) or, in the worst case, kills processes to reclaim memory. Rising memory that never comes back down often points to a leak worth investigating.
Disk
Disk usage is the one that most often causes a surprise outage. A disk quietly fills with logs, uploads or database growth, and when it hits 100% applications fail to write and can crash. Watch the trend, not just the current number — a disk climbing 1% a day tells you when you'll run out.
Disk full is a classic outage
A full disk breaks writes for everything on the box at once — databases, logs, the app. Set a disk threshold and act on it well before you reach 100%.
Beyond metrics: what's running and the machine's health
The Monitoring tab isn't just charts. When the agent is up to date, it also reports a server snapshot — shown as widgets that only appear when the thing is actually present, and that you can rearrange (see Compose your board):
- System: OS and version, kernel, architecture, vCPU, RAM, disk, connection mode.
- Network exposure: what the machine exposes, and what is meant to stop it. Listening ports (port, protocol, process, a service label for well-known ports) — the ones reachable from outside first — alongside the firewall's state (ufw, firewalld, nftables), its rules as the tool printed them, and its toggle for administrators.
The firewall and the port list used to be two separate cards, each telling half the story: the firewall says what is allowed, the port list what is actually listening. The useful answer is where they meet — a service bound to
0.0.0.0behind an inactive firewall is reachable; the same service bound to127.0.0.1is not, whatever the firewall says. Servor compares that list against the previous reading and alerts you when a port becomes reachable from outside — either it appeared, or, more insidiously, a service already running moved from127.0.0.1to0.0.0.0. In that second case nothing "opened": the service was up, it merely stopped being private, and that is exactly the kind of drift you find out about the day somebody else finds it. A port listening only on loopback raises nothing, and neither does a machine's very first reading — otherwise every new server would alert on its entire surface. - What's running: Docker/Podman containers (state, health, published ports), pm2 processes (status, restarts, CPU/memory), and detected services (nginx, PostgreSQL, Redis… — active/inactive + version). After an action taken from this screen — stopping a container, restarting a service, toggling the firewall, applying updates — the agent sends a fresh reading without waiting for its interval, and the screen updates itself within seconds. No need to reload the page.
- Server health: a traffic-light summary of the signals — failed systemd units, reboot required, firewall active, clock in sync, CPU/RAM/disk pressure.
- TLS & domains: detected certificates with their days remaining, and the domains attached to the server. k3s and self-hosted tools (Coolify, Portainer) show up when present.
Act on a container
Containers aren't only listed — each tile carries its own controls: start,
stop and restart apply immediately, while update image (pull) and
remove ask for confirmation first, since one changes what comes up next and
the other destroys the container.
Removal is deliberately not forced: Docker refuses to remove a container that is still running, and Servor keeps that refusal rather than overriding it. Stop the container first if you really mean it.
A running container's tile also carries a shell button, which opens an
interactive session inside the container, right there in the page. It runs
sh rather than bash, because sh is the one shell essentially every image
ships — alpine and slim images routinely have no bash, and aiming for it would
close the session the moment it opened. Type bash once inside if the image has
it.
Every one of these is a command like any other — signed in your browser, recorded in your command history and in the audit log. To read what a container is printing, use Follow logs live.
Rebooting or powering off
From the Monitoring tab, the Power card offers to reboot or shut the server down. It is admins only, protected by step-up MFA, and confirmed by typing the server name — not by a single click.
That friction is deliberate: it is the one action in Servor that no remote access can walk back. If the machine does not come back, neither the terminal nor the agent can switch it on — that takes your host, or physical access.
Reboot stays forbidden everywhere else
Servor refuses reboot, shutdown, halt and poweroff everywhere else: in the
terminal, in a scheduled command, and above all for the AI copilot. This card does not
punch a hole in that rule — your browser signs an action name rather than a
command line, and the agent maps that word to a command it holds itself. No string
from outside ever reaches a shell on this path.
Acting on a service
The Detected services card works the same way: start, stop, restart and reload configuration apply immediately, while enable and disable at boot, mask and unmask ask for confirmation — the first two change what comes up at the next boot, and masking makes a unit impossible to start at all, including as another service's dependency.
Those buttons only appear for services systemd actually supervises. Servor
also detects services started by pm2, supervisord or a container: those are
listed, but without buttons, because systemctl does not speak for them and the
command would fail every time.
Privileges required
systemctl needs root. If the agent is configured to run as an unprivileged
user, the action comes back with a permission error — Servor says so plainly
rather than adding a sudo you never approved: the command signed in your
browser is exactly the one that runs, and nothing downstream may add to it.
Requires an up-to-date agent
This information is collected by the agent. A server whose agent hasn't been updated yet shows the cards empty — reinstall / repair the agent to enable them. Heavy items (versions, TLS, k8s) refresh less often than live states (containers, pm2) to stay light on the machine.
Compose your board
The Customise button at the top of the tab puts the page into arranging mode. Each widget then gets a bar where you can:
- move it, by dragging the handle, or from the keyboard (Tab to the handle, Space to lift, arrows to move, Space to drop);
- change its width — 1, 2 or 4 columns. A widget whose content stops being readable below a certain width refuses the narrower sizes;
- remove it from the board.
Removed widgets collect below the grid and go back with one click. Reset restores the default arrangement.
One arrangement per server, shared by the team
The arrangement is saved on the server, not on your account and not in your
browser: a database box does not want the same board as one running twelve
containers, and an arrangement that makes a machine legible is worth sharing
rather than having everyone rediscover it. Rearranging the board therefore
rearranges it for the whole team — which is why the action needs the member
role: a viewer reads the board, it does not rearrange it for everyone else.
On a narrow screen the grid drops to two columns, and 4-column widgets then take 2 — the full width.
What arranging does not do
A widget only exists if the server reports something for it. A machine with no containers has no Docker widget, and it will appear on its own the day it has one. Conversely, a widget you remove stays removed — that is your decision, not a side effect of what was last reported.
Set thresholds
Each server's settings (the gear icon) include surveillance thresholds for its resources. Set a level — for example warn when disk passes 85% — so a metric drifting into dangerous territory becomes something you're told about rather than something you discover during an incident. Combine thresholds with alerts and notification channels so the warning reaches you.
Two settings sit next to each threshold and decide when the alert goes out:
- Consecutive samples — how many readings in a row must sit above the threshold before an alert fires. A one-second spike during a backup is not an outage.
- Recovery margin — how many points the metric must fall back below the threshold before a new alert can fire. With a 90% threshold and a margin of 5, the alert only re-arms once the value has been at 85% or lower for that many consecutive samples.
The recovery margin is what stops a machine that permanently hovers around its threshold from notifying you on every swing. Set it to 0 if a single reading below the threshold should be enough to re-arm the alert.
Investigate right there
When a metric looks wrong, jump into the web terminal or
run a command on the same server to dig in — df -h for
disk, top for CPU and memory. Or ask the AI copilot to
take a look.
Metrics vs. monitors
The two work together:
- Monitors answer "is this service responding?" — see monitor types. The agent metric type bridges the two: it puts a threshold, and therefore an alert, on the values shown on this page.
- Resource metrics answer "is the machine itself healthy inside?"
A server can be fully up to an HTTP monitor while its disk is at 98% — the resource view is what catches that before it turns into an outage.