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_data

Deploy it:

docker compose up -d

Once running, navigate to http://<your-server-ip>:8090 and create your admin account.

⚠️
Don't expose port 8090 to the public internet without a secure reverse proxy in front of it. Beszel's built-in auth is fine for a local network, but you don't want your server metrics accessible to anyone on the internet.

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.

  1. Log into your new Beszel Hub at http://<your-server-ip>:8090
  2. Click "Add System"
  3. 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:ro

Deploy the agent:

docker compose up -d

Repeat this on every node you want to monitor. On a 4-node Proxmox cluster, that means deploying this agent stack on all four nodes.

💡
Why 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.
💡
Why mount /:/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.