Goodbye Prometheus, Hello Beszel? A Lightweight Monitoring Stack for Homelabs
Is the standard Prometheus and Grafana stack too heavy for your homelab? Learn how to deploy Beszel, a lightweight, push-based monitoring hub that delivers a beautiful, instant dashboard for your servers and Docker containers without the massive resource footprint.
If you've been running a homelab for a while, especially a small cluster like my Proxmox setup, you've likely fallen down the monitoring rabbit hole. The standard advice is almost always the same ➡️ Prometheus + Grafana + Node Exporter.
Don't get me wrong, that stack is the standard for a reason. It's powerful, infinitely queryable, and looks great. But it's also heavy. Running a full Prometheus stack just to answer the question "Is my server out of RAM?" is like commuting to work in a Formula 1 car. It requires significant maintenance, storage for time-series data, and most ironically a chunk of the very system resources you're trying to monitor.
Enter Beszel!
What is Beszel?
Beszel is a lightweight server monitoring hub. It consists of two parts:
- The Hub — a lightweight web interface that collects and displays data
- The Agent — a tiny binary that runs on your servers (or inside Docker) and pushes stats to the Hub
Unlike Prometheus, which pulls data (requiring you to configure scrapers, exporters, and targets), Beszel agents push data to the Hub. It's incredibly efficient, uses negligible RAM, and the UI is beautiful out of the box (no Grafana dashboard design required)
Why I'm Switching (For Now)
- Simplicity: I set up my entire 4-node cluster monitoring in 10 minutes
- Docker integration: It automatically detects running Docker containers and tracks their individual CPU and RAM usage without any extra configuration
- Alerting: Built-in support for Discord, ntfy, and email alerts
- Footprint: The agent uses less than 1% CPU and tiny amounts of RAM
Installing the Beszel Hub
We'll use Docker Compose to deploy the Hub, the central dashboard where all your metrics land.
Prerequisites: A server with Docker and Docker Compose installed. If you need a VM to run this on, check out Setting Up Ubuntu Server VMs on Proxmox.
Create a docker-compose.yml for the Hub:
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
network_mode: bridge
ports:
- "8090:8090"
volumes:
- ./beszel_data:/beszel_dataDeploy it:
docker compose up -dOnce running, navigate to http://<your-server-ip>:8090 and create your admin account.
Installing the Agent
This is where the magic happens. You need to install the agent on every machine you want to monitor, including the one running the Hub itself.
- Log into your new Beszel Hub at
http://<your-server-ip>:8090 - Click "Add System"
- Copy the Public Key shown in the modal — the agent needs this to authenticate securely with the Hub
Create a docker-compose.yml for the Agent. Replace YOUR_PUBLIC_KEY_HERE with the key you copied, and update the HUB_URL to point at your Hub's IP address:
services:
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
environment:
- PORT=45876
- KEY=YOUR_PUBLIC_KEY_HERE
- HUB_URL=http://192.168.1.100:8090
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /:/extra/root:roDeploy the agent:
docker compose up -dRepeat this on every node you want to monitor. On a 4-node Proxmox cluster, that means deploying this agent stack on all four nodes.
network_mode: host? The agent needs direct access to the host's network interfaces to report accurate network statistics. If you run it in bridge mode, it will only see the container's own network traffic — not the host's./:/extra/root:ro? Without this read-only mount, the agent can only see the container's overlay filesystem. Mounting the host root lets it report actual disk usage across all your drives.Verification
Head back to your Hub dashboard. Within seconds, the status light next to your new system should turn green. You'll immediately see:
- Total CPU, RAM, and disk usage
- Docker container-specific stats (click the Docker icon next to each system)
- Temperature and uptime
No exporters to configure. No PromQL to learn. No Grafana dashboards to build. It just works.
Is It a Prometheus Killer?
For the enterprise? No. Prometheus allows for complex data manipulation, long-term retention policies, and high-availability scaling that Beszel isn't trying to compete with. If you need to query six months of metric history with custom aggregations, Prometheus is still the answer.
For the homelab? Absolutely. If you just want to know whether your Jellyfin server is crashing or which container is eating your memory, Beszel is faster to set up, prettier to look at, and significantly easier to maintain. You get a single pane of glass for your entire cluster's health without the overhead of a full monitoring stack.
If you're running the full Prometheus and Grafana stack and it's working well for you, there's no urgent reason to switch — I wrote a full guide on that setup in Monitoring Your Homelab with Grafana and Prometheus. But if you've been putting off monitoring because the setup felt too heavy, Beszel removes every excuse. And once you can see what's happening on your nodes, you might want to optimise your memory usage or harden your Docker containers.