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
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.
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"
Broken links between servers show up amber and dashed on the canvas, from the agents' own TCP connections.
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.
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.
Security, explained
Checks that say why, failed SSH logins and where they come from, and every session with the key used.
Uptime, by day
Per server and per site, from servers that watch each other.
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.
Two minutes
One command per server. Then pair and watch.
-
Install the agent
The installer creates a user, a key and a hardened unit, starts the agent, and prints a pairing code.
-
Pair your device
In the app, click Add server and type the code. Nothing to copy back to the server.
-
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.