Beszel: Lightweight Server Monitoring Without the Grafana Overhead

A tiny hub-and-agent dashboard for when full Prometheus is overkill

I will defend the Grafana-and-Prometheus stack to anyone who’ll listen. But I have to be honest about something: it is a lot of machinery to answer the question “is my little VPS okay?” For a serious homelab with a dozen nodes and real alerting needs, the weight is justified. For three boxes and a Raspberry Pi, standing up Prometheus, exporters, Grafana, and a pile of YAML to find out whether a disk is filling up feels like hiring a structural engineer to hang a picture.

Beszel is what you reach for when you’ve had that exact thought. It’s a young project — it only really appeared on people’s radars over the last year or so — and it does deliberately less than Prometheus, which turns out to be exactly the point.

Advertisement

Beszel has two parts and that’s the whole story. There’s a hub, which is a single small binary that serves the web dashboard and stores history in an embedded database (it’s built on PocketBase, so there’s no separate Postgres to babysit). And there’s an agent, an even smaller binary you run on each machine you want to watch. The agent collects CPU, memory, disk, network and Docker container stats, and the hub pulls them in over an SSH-based connection.

That SSH detail matters. There’s no broad network of scrape targets to firewall, no exporters listening on ports you have to remember to secure. The hub holds a key, the agent trusts it, and the connection is encrypted by design. For watching a VPS that lives out on the public internet, this is a far less nervous arrangement than poking a metrics port through a firewall.

The hub is one container. Here’s the gist:

services:
  beszel:
    image: henrygd/beszel:latest
    volumes:
      - ./beszel_data:/beszel_data
    ports:
      - "8090:8090"

Open the web UI, create your admin account, and the dashboard walks you through adding a system. It hands you the agent command and the public key to drop in. On each machine you want monitored, the agent runs as its own little container or a systemd service:

services:
  beszel-agent:
    image: henrygd/beszel-agent:latest
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      PORT: 45876
      KEY: "ssh-ed25519 AAAA... your-hub-public-key"

Mount the Docker socket read-only and the agent will break out per-container CPU and memory too, which is genuinely useful — you get a per-service view without running cAdvisor and the small mountain of metrics it produces.

The dashboard is clean and immediate: a list of your systems with status dots, and click-through detail pages with the graphs you actually look at — load, memory pressure, disk usage and I/O, network throughput, container breakdowns. It keeps a rolling history so you can see trends over days and weeks, not just the current instant.

Beszel also does the thing that makes monitoring worthwhile: alerts. You can set per-system thresholds — CPU over X for Y minutes, disk above a percentage, a system going offline — and have them delivered. It leans on the Shoutrrr notification library under the hood, so it can fan out to email, Telegram, Discord, ntfy and a long list of other targets without you wiring up Alertmanager.

What you don’t get is the open-ended power of the real stack. There’s no PromQL, no custom dashboards full of bespoke panels, no thousand community dashboards to import, no arbitrary exporters for your UPS or your solar inverter or your weird IoT thing. Beszel watches the host and its containers, presents that beautifully, and stops there. If you want to graph an application-specific metric you invented, this is the wrong tool.

This is a new project, and I’d be doing you a disservice to pretend otherwise. New projects move fast and occasionally break things; the feature set is still growing; and the bus factor on a young open-source tool is always worth a thought before you make it load-bearing. It’s MIT-licensed and the development has been brisk and responsive, which are good signs, but it hasn’t yet earned the boring, decade-deep stability that Prometheus has. Treat it accordingly: brilliant for keeping an eye on things, not yet where I’d hang a pager rotation that someone’s job depends on.

Beszel is for the person who wants a tidy single-pane view of a few machines and could not be bothered to operate a metrics platform to get it. If that’s you — a handful of VPSes, a home server, a Pi or two — it’s a delight: minutes to set up, light enough to forget it’s running, pretty enough that you’ll actually open it. I added it to a couple of small boxes that genuinely didn’t warrant a Prometheus install, and within ten minutes I had exactly the dashboard I’d been meaning to build for two years and never had. It doesn’t replace the big stack where the big stack belongs, but for everything below that line, it’s the most enjoyable monitoring I’ve set up in ages.

Advertisement

Related Content

Advertisement
Smarc
Written by Smarc

Founder and editor of vo.rs. A lifelong tinkerer who self-hosts far more than is sensible, hardens Linux boxes for fun, and prods the latest AI tools to see what they can really do. The how-to guides here are the notes Smarc wishes had existed the first time round.