New Live stats from nginx, PHP-FPM, Redis, PostgreSQL and MySQL →

Every server.
One calm canvas.

A small agent on each server keeps its own history, and the app connects to it directly. No SSH, no stored credentials, no middleman.

$ curl -fsSL https://get.serverbeats.com/install.sh | sudo sh

macOS desktop app · web app · Linux agent with systemd

Fleet7 of 8 online 3 need you

Reads what your servers already run

  • systemd
  • Docker
  • nginx
  • PostgreSQL
  • MySQL
  • Redis
  • PHP-FPM
  • PM2
  • ZFS
  • Tailscale
  • Prometheus

Insights

Not just what broke. Why, where, and the command to check it.

Every problem comes with its cause, even when the cause lives on another server. No dashboards to squint at, no graphs to correlate by hand.

Needs youdb-primaryStorage · 4 min ago

Disk full in 9 days

/var/lib/postgresql grew 14 GB this week. WAL archiving has failed since 03:12, when backup-2's rsync port changed from 873 to 8873, so old segments are never removed.

$sudo -u postgres psql -c "select * from pg_stat_archiver"
backup-2 port 873 → 8873 db-primary disk 91% · 9 days refused :873 03:12 config changed 03:14 archive failed ×1 09:40 archive failed ×392

Broken links between servers show up amber and dashed on the canvas, from the agents' own TCP connections.

api-1Production · Ubuntu 24.04 · Tailscale 100.64.0.12 · up 41 days
CPU –
Memory –

One crosshair for the whole page. Hover a chart and every chart follows, with the deploy that caused it.

Complete

Everything you'd SSH in to find. Already there.

Metrics, logs, activity, processes, services, containers, network, storage and security. One server, one page, one keystroke apart.

Logs that summarize themselves

journald and the log files your apps write, in one search. Patterns group lines by template so 2,000 timeouts read as one.

History lives on the server

The agent keeps recording while you're away, so any device that connects gets the whole story.

24 h
every 2 s
7 d
per minute
1 y
per hour
disk cap100 MB

Containers, without the root socket

Docker's socket is root-equivalent, so the agent never touches it. A separate proxy forwards reads and start, stop, restart. Never create, exec or mount.

See containers and start, stop, restart, pause and unpause them, each with a confirm step.

Alerts where you already are

Thresholds you set from the app, pauses that end on their own, and check-ins that raise jobs that ran late or failed.

Telegram Discord Pushover Desktop Prometheus

Security, explained

Checks that say why, failed SSH logins and where they come from, and every session with the key used.

Password login offsshd
14 updates pendingapt
Redis on 0.0.0.0:6379public

Uptime, by day

Per server and per site, from servers that watch each other.

99.94%30 days
Oct 7Today

Your stack, live

nginx, PHP-FPM, Redis, PostgreSQL and MySQL stats, read locally. No passwords stored.

Private by design

Your servers talk to you. Nobody else.

There's no Serverbeats cloud holding your metrics. Each agent keeps its own data and only answers devices it has paired with.

Keys, not passwords

Pair a device with a six-character code. It gets a key, the agent remembers it, and you can revoke it anytime. Invite teammates with a view-only role.

A relay that can't read

Behind NAT with no open ports? The relay forwards encrypted frames as they are. It can't read them and stores nothing. Or run your own on Cloudflare.

Least privilege, by default

Its own serverbeats user, a hardened systemd unit, and actions that are opt-in through polkit. One static Go binary.

Your devices Mac · browser Agent on each server Tailscale Relay encrypted · stores nothing TLS, your cert

Two minutes

One command per server. Then pair and watch.

  1. Install the agent

    The installer creates a user, a key and a hardened unit, starts the agent, and prints a pairing code.

  2. Pair your device

    In the app, click Add server and type the code. Nothing to copy back to the server.

  3. That's it

    Running the installer again upgrades in place, keeping keys, devices and history.

# Behind NAT, no open ports
$ curl -fsSL https://get.serverbeats.com/install.sh | sudo sh -s -- --mode relay

✓ Created user serverbeats
✓ Wrote /etc/serverbeats/agent.toml and key
✓ Started serverbeats-agent.service
✓ Docker found: access proxy started

Pair this server in the app with
K7Q-4ZP

Linux with systemd, amd64 or arm64. The desktop app needs macOS; the web app runs in any modern browser.

Calm. Complete. Crafted.

Know what's wrong and where, at a glance. Know why, one click later.