Skip to content

Server Monitor

The Server Monitor is a live dashboard for your whole fleet. Instead of opening a session and typing top, df -h, and free -m on every box in turn, it collects the essentials — CPU, memory, disk, uptime, load average, and network latency — across all your saved connections and colors each host by how healthy it is. One glance tells you which server is on fire and which is idling.

Think of it as the instrument cluster on a car dashboard: you do not want to pop the hood to check the oil, you want a gauge that goes green, amber, or red.

Desktop: click the Server Monitor icon (the heart-monitor glyph) in the sidebar. The monitor opens as a dense, sortable table inside the desktop shell — one row per host.

Mobile: open Settings and tap Server Monitor. The mobile layout shows one card per host with inline gauges and sparklines. Tap a host’s card to open its detail view, with a live history graph, “Now” cards for CPU, memory, disk, and network, per-filesystem usage, and system info.

Both surfaces share the exact same health model, so a host that reads “Critical” on your phone reads “Critical” on your desktop too. Local shells are excluded — the monitor only tracks SSH connections.

The monitor has two independent collection mechanisms, and it tells you which one produced each reading with a small “via SSH” or “via Prometheus” source chip.

SourceHow it collectsNeeds a live session?
SSH (default)Runs lightweight shell commands (cat /proc/loadavg, free -m, df -h /, uptime -p, nproc, plus macOS top/vm_stat/sysctl equivalents) over an already-open SSH session. Each command has a 5-second timeout.Yes
Prometheus (optional)Scrapes a node_exporter target. If you configure a Prometheus URL in settings, ZestSSH auto-discovers targets and matches them to your saved connections by host, label, or job name.No

Separately from stats, ZestSSH runs a lightweight TCP reachability probe against every connection to measure round-trip latency and tell “online” from “offline.” That probe runs whether or not a session is open, so even an un-monitored host shows a latency figure and an online/offline dot.

The upshot: SSH-sourced stats only appear while you have a session open to that host. If a host has no live session and no Prometheus match, its card reads “Stats need an active SSH session or a configured Prometheus target.”

MetricWhat it showsNotes
CPUOn Linux, the 1-minute load average divided by core count, expressed as a percentage. On macOS, 100 - idle%.Because Linux CPU is load-derived, a busy multi-core box can read differently than an instantaneous “CPU %” you might expect from top.
RAMUsed memory as a percentage of total, with the raw used / total MB shown underneath.Linux uses free -m; macOS sums active + wired + compressed pages.
DiskRoot filesystem (/) usage percentage from df -h /.Only the root filesystem is tracked, not every mount.
LatencyTCP round-trip time to the host, in milliseconds, from the reachability probe.This is a network probe, not an SSH command timing.
UptimeSystem uptime, abbreviated to its two most-significant units (e.g. 5d 3h).Hover to see the full string.
LoadThe 1-, 5-, and 15-minute load averages.Shown on the mobile card; read as “how many cores’ worth of work is queued.”

Every gauge is colored the same way, and the per-host severity (the status pill / summary strip) is derived from those same bands so nothing ever disagrees.

Gauge colors (CPU / RAM / Disk):

BandColorMeaning
Below 70%GreenHealthy
70% — 90%AmberWarning
90% or aboveRedCritical

Latency colors:

BandColorMeaning
100 ms or lessGreenComfortable for interactive SSH
100 — 250 msAmberNoticeable but usable
Above 250 msRedGenuinely laggy

These latency bands are calibrated for real-world SSH — a healthy LAN or regional link at 60-90 ms reads green, not amber.

Host severity buckets, worst-first, are what the summary strip counts and what the default sort ranks by:

  • Offline — a fresh reachability probe came back down and no session is open.
  • Critical — any fresh gauge is at 90%+ or latency is above 250 ms.
  • Warning — any fresh gauge is at 70%+ or latency is above 100 ms.
  • Stale — every reading is older than the freshness threshold and nothing is keeping it current, so none of the numbers can be trusted.
  • Healthy — online and fresh with nothing above the warning line.
  • Unmonitored — no data from either mechanism yet.

Crucially, a stale reading never masquerades as a live one: gauge and latency severity only count while their own source is fresh. The stale threshold is three times the refresh interval, with a 60-second floor, so a single missed tick on a short interval will not flag a host stale.

  • Manual: tap the refresh button in the header (or pull-to-refresh on mobile). This re-runs both the reachability probes and stats collection.
  • Auto-refresh: off by default. Tap the sync icon and pick an interval — 10, 15, 30, 60, or 120 seconds (30 is the default when you turn it on). Once enabled it keeps running in the background even after you leave the screen, until you turn it off.
  • Cached across restarts: the last-known stats are saved locally, so when you reopen the app you see the previous values immediately — de-emphasized (muted color) and labelled “collected X ago” until fresh data lands. A bold amber banner marks genuinely stale data.

Mobile: sort by Severity (default, worst-first), Name A-Z / Z-A, or highest CPU / RAM / Disk. Toggle Hide unmonitored to drop hosts with no data, and tap any pill in the severity summary strip to filter to just that bucket. Your sort choice is remembered between sessions.

Desktop: click any column header (Host, Status, CPU, RAM, Disk, Latency, Source) to sort by it; click again to reverse. The severity summary strip at the top doubles as a bucket filter.

Both surfaces draw a small history sparkline from recent samples (up to the last 60, kept in memory while the app runs) — CPU/RAM/Disk on the mobile cards, CPU on the desktop rows — so you can see a trend, not just a snapshot.

  1. Save the connections you want to watch (they show up automatically — there is no separate “add to monitor” step).
  2. Open the Server Monitor (sidebar on desktop, Settings on mobile).
  3. Connect a session to any host you want SSH-sourced stats for. The card fills in within a few seconds of connecting.
  4. (Optional) To monitor hosts without keeping sessions open, configure a Prometheus URL in settings and let auto-discovery match your node_exporter targets.
  5. Turn on auto-refresh and pick an interval that suits how closely you are watching.
  • Expecting stats with no session open. SSH-sourced CPU/RAM/disk only appear while a session to that host is connected. Without a session (and without Prometheus), you will still get latency and an online/offline dot, but the gauges stay empty. Connect, or configure Prometheus.
  • Reading stale numbers as live. Cached values look real but are muted and carry a “collected X ago” note or a bold stale banner. If it is not brightly colored, it is not live.
  • Misreading CPU%. On Linux the CPU figure is load-average divided by cores — it is not the same as the instantaneous CPU% you would see in htop. Use it as a relative health signal.
  • Assuming latency reflects SSH speed. Latency is a raw TCP probe, independent of your SSH throughput or session responsiveness.
  • Forgetting auto-refresh is on. It keeps polling every host in the background at your chosen interval, which means repeated probes and (for Prometheus) HTTP requests. Turn it off when you are done watching.

The Server Monitor itself is available on every tier, but SSH-sourced stats depend on having sessions open — and concurrent sessions are capped on the free tier.

FreePro (Squeezed)
View the monitor, latency probes, cached statsYesYes
Concurrent SSH sessions feeding live statsUp to 4 on desktop / 2 on mobileUnlimited
Prometheus source (session-independent)YesYes

Because Prometheus does not need an open session, it is the practical way to watch more hosts live than the free session cap allows.

  • The monitor is designed for Linux and macOS/BSD servers — the remote OS is auto-detected via uname -s and the right commands are chosen per host. Servers running other operating systems may report some or all metrics as unavailable.
  • Latency and online/offline status work for any reachable host regardless of OS, since they rely on a TCP probe rather than shell commands.
  • Local shell “connections” are never shown in the monitor.
  • Split Terminal — keep a couple of servers on screen while you watch the monitor for the rest.
  • Snippets — one-tap health commands (df -h, free -h, journalctl) to dig into a host the monitor flagged.
  • Broadcast — once you have spotted a fleet-wide issue, fix it across every host at once.
  • SSH Connections — set up the saved connections the monitor watches.