You've got a Proxmox box running a handful of VMs and containers, and at some point you'll want to answer a simple question: is anything about to run out of RAM, fill up its disk, or quietly peg a CPU core at 100% while you're not looking? The Proxmox web UI shows you live graphs per guest, sure, but it doesn't give you one screen with everything on it, and it definitely doesn't ping you at 2 a.m. when a disk crosses 90% full. That's the gap a small monitoring tool called Beszel fills, and it's light enough to run in a Proxmox LXC container without you noticing it's even there.
This guide walks through installing the Beszel hub in its own LXC container, creating your admin account, and connecting your first monitored system — the Proxmox host itself. By the end you'll have a live dashboard of CPU, memory, disk, and network usage across your homelab, with almost no resources spent running it.
What You Will Learn
- What Beszel is and how its hub-and-agent design works
- How to deploy the Beszel hub in a Proxmox VE LXC container using the community-scripts helper
- How to create your admin account and generate a connection token
- How to install the Beszel agent on your Proxmox host so you can monitor it
- Common errors people run into during setup, and how to fix them
What Is This Feature?
Beszel is an open-source, self-hosted server monitoring tool. It's built around two small pieces: a hub, which is the web dashboard where you view everything, and one or more agents, which are tiny background processes that sit on each machine you want to watch and report their stats back to the hub. Install the hub once, then drop an agent on every VM, container, or physical server you care about, and they all show up as tiles on the same dashboard.
Each agent reports CPU load, memory and swap usage, disk space and I/O, network throughput, and system temperature where the hardware exposes it. If a machine runs Docker or Podman, the agent also picks up per-container stats, so you can see which container on a host is actually eating the RAM. None of this requires a database server or a message queue behind the scenes — the hub ships with its own embedded database, which is a big part of why it fits comfortably in a container with half a gigabyte of RAM.
If you haven't used an LXC container before, think of it as a much lighter alternative to a full virtual machine. Instead of emulating its own virtual hardware and booting a separate kernel, an LXC container shares the Proxmox host's Linux kernel and just gets its own isolated slice of processes, filesystem, and network stack. That's why containers start in a couple of seconds and can run comfortably on a fraction of the CPU and RAM a VM would need for the same job — which makes an LXC container the obvious place to put a lightweight monitoring hub like this one.
Why Would You Use It?
Proxmox already shows you per-guest graphs, and tools like Grafana or Netdata can do far more detailed monitoring if you want it. So where does Beszel fit?
Mostly in the gap between "nothing" and "a full observability stack." A Grafana and Prometheus setup is powerful, but it's also several moving parts to configure, secure, and keep updated. Beszel is one binary for the hub and one binary for each agent, with a setup wizard that takes about five minutes total. You get a single page showing every VM, container, and physical host you own, color-coded by how close it is to trouble, without touching a YAML config file for scrape targets.
It's also genuinely useful outside of Proxmox itself. Once the hub exists, you can point agents at a Raspberry Pi, a VPS you rent somewhere, or your NAS, and they all land on the same dashboard next to your Proxmox guests. I wouldn't reach for it if you're already running a serious Grafana stack and don't mind maintaining it — but if you just want to glance at one page and know whether everything's healthy, Beszel does that job well and gets out of the way.
Prerequisites
- A working Proxmox VE host — this was tested on 8.x and current 9.2, and the steps don't change between them.
- Root access to the Proxmox web UI, plus access to the node's Shell.
- At least 5 GB free on the storage you'll use for the container's disk (the default template needs this much, even though actual usage stays well under it).
- Outbound internet access from the Proxmox host, since the install script pulls the Debian template and the Beszel binary from GitHub.
- A few minutes of downtime tolerance on whatever host you plan to install the agent on — installing the agent restarts a small systemd service, nothing more.
Step-by-Step Tutorial
1. Open the Proxmox VE shell
Log into the web UI, click your node in the left-hand tree, and choose Shell from the top-right menu. You're now in a root shell on the Proxmox host itself, not inside any container.
2. Run the community-scripts installer
Paste this and press enter:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/beszel.sh)"
This is the community-scripts helper script (the actively maintained successor to the old tteck scripts a lot of homelab guides still reference). It builds a fresh Debian 13 LXC container, installs Beszel inside it, and starts the service automatically. By default the container gets 1 CPU core, 512 MB of RAM, and a 5 GB disk, running unprivileged — plenty for a monitoring hub watching a normal homelab. If you'd rather set a static IP or a specific hostname up front, choose Advanced when the script asks; otherwise Default with DHCP is fine and you can always change the network settings later from the container's Hardware tab.
3. Find the container's IP address
The script prints the new container ID and its IP address once the install finishes. If you scrolled past it, click the container in the left-hand tree and check the Summary tab — the IP shows up under the network section within a few seconds of the container booting.
4. Open the hub and create your admin account
Point a browser at http://<container-ip>:8090. The first time you load it, Beszel skips straight to an account creation form instead of a login screen — set an email and password here, and that becomes your one and only admin login (there's no separate signup flow to worry about locking down later).
Once you're in, you'll see an empty dashboard. That's expected — the hub doesn't monitor anything on its own. It only shows data for systems that are running an agent pointed back at it.
5. Add your Proxmox host as a system to monitor
Click Add System in the top corner of the dashboard. This opens a dialog with a name field, the hub's own address, and a generated SSH public key plus an install command tailored to that system. Give it a name like pve-host and leave the rest as generated — you'll use that install command in the next step.
Newer releases of Beszel also support a universal token, created under Settings → Tokens on the hub, which lets you install an agent first and register it with the hub afterward instead of copying a key into the install command. Either method ends up in the same place; the per-system key is simpler for a first install.
6. Install the agent on the Proxmox host
Back in the Proxmox shell — the host's shell, not the container's — run the official agent installer:
curl -sL https://get.beszel.dev -o /tmp/install-agent.sh && chmod +x /tmp/install-agent.sh && /tmp/install-agent.sh
Run it without any flags and it'll ask you interactively for the hub's public key and a token, both of which you can copy straight out of the Add System dialog from the previous step. If you'd rather skip the prompts, pass them directly:
/tmp/install-agent.sh -k "ssh-ed25519 AAAA...your-key-here" -t "your-token-here"
The installer creates a dedicated, non-root beszel system user and a beszel-agent.service systemd unit, then starts it. This is the same installer you'd use on any other Linux box you want to monitor later — a VPS, a Raspberry Pi, whatever — the command doesn't change.
7. Confirm the data is flowing
Switch back to the hub's dashboard in your browser and refresh it. Within a few seconds, the system you just added should switch from a gray "pending" state to showing live CPU, memory, disk, and network graphs. If your Proxmox host runs Docker for anything, container-level stats show up automatically too — no extra configuration needed for that part.
8. Repeat for anything else you want on the dashboard
From here, add another system in the hub, run the same install command on that machine with its own key or token, and it joins the same dashboard. A lot of people start with just the Proxmox host, then add their NAS and a couple of the more resource-hungry VMs once they see how little overhead the agent adds.
Commands Explained
| Command | What it does |
|---|---|
bash -c "$(curl -fsSL .../ct/beszel.sh)" | Runs the community-scripts installer that creates the LXC container and installs the Beszel hub inside it. |
curl -sL https://get.beszel.dev -o /tmp/install-agent.sh | Downloads the official Beszel agent installer script to a temporary file. |
/tmp/install-agent.sh -k "..." -t "..." | Runs the agent installer non-interactively, passing the hub's public key and a connection token so it doesn't prompt for them. |
systemctl status beszel-hub | Checks whether the hub service is running, and shows its most recent log lines. |
systemctl status beszel-agent | Same idea, but for the agent process running on a monitored system. |
pct status <container-id> | Run from the Proxmox host to confirm whether the hub's LXC container is actually running. |
Common Errors
Dashboard stays gray and says "waiting for connection" — this almost always means the agent can't reach the hub over the network. Check that the container's IP is what you think it is, that nothing's blocking port 8090 between the two machines, and that you copied the key or token exactly — a trailing space pasted along with an SSH key is a surprisingly common cause.
Installer script fails with "command not found: curl" — rare on a fresh Debian 13 template since curl ships by default, but it can happen on an older or stripped-down system you're installing the agent on. Run apt update && apt install -y curl first, then re-run the installer.
"Connection refused" when opening port 8090 — the hub service probably isn't running yet, or crashed on startup. Log into the container's console and run systemctl status beszel-hub to see what happened; a full disk on the container is the most common reason it fails to start.
Agent installs but immediately shows "unauthorized" in its logs — the key or token you supplied doesn't match what the hub is expecting. Regenerate a fresh token from Settings → Tokens on the hub and re-run the agent installer with the new value rather than trying to fix the old one.
Troubleshooting
Start on whichever side is misbehaving. On the hub container:
journalctl -u beszel-hub -f
On any machine running the agent:
journalctl -u beszel-agent -f
Both commands tail the live log, so you can watch what happens as a connection attempt comes in or fails. If the hub container won't even boot, check its console directly from the Proxmox UI rather than trying to SSH in — that sidesteps any network issue you might be debugging in the first place.
If everything looks like it's running but the dashboard graphs are flat or empty, give it a minute. The agent reports on a short interval rather than instantly, so a brand-new connection can take 30 seconds or so before the first real data point shows up.
Best Practices
- Take a Proxmox snapshot of the hub container right after setup, before you start tweaking things — it's a two-second safety net.
- Don't expose port 8090 straight to the internet. Put a reverse proxy with HTTPS in front of it if you need to check the dashboard away from home, the same way you would for any other admin panel.
- Use a unique token per system rather than reusing one everywhere. It makes it obvious which machine to look at if you ever need to revoke access to just one of them.
- Leave the container unprivileged unless you have a specific reason to change it — the installer defaults to this for a reason.
- Re-run the same install command later with the update option if a new Beszel release comes out; the script detects the existing container instead of creating a second one.
Frequently Asked Questions
Does Beszel replace Grafana or Netdata?
Not really — it's a much simpler tool aimed at a quick overview rather than deep historical analysis or custom dashboards. If you already run Grafana and like it, there's no strong reason to switch.
Can I monitor VMs, not just LXC containers, with this?
Yes. Install the same agent binary inside any VM's guest OS and point it at the hub, exactly like you would on a physical host.
How much overhead does the agent add?
Very little — it's a single small Go binary sitting mostly idle between reporting intervals. You won't notice it on a system that's already running comfortably.
Do I need a domain name to use this?
No. A local IP address on your home network is enough to get started. A domain and a certificate only matter if you want to check the dashboard from outside your LAN.
What happens if the hub container goes down?
Agents just keep collecting locally and reconnect once the hub is back — you lose the ability to view live and historical data during the outage, but nothing on the monitored systems breaks.
Conclusion
You've now got a working monitoring hub watching at least one system, and adding more is just a matter of running the same agent installer wherever you need it. Beszel isn't trying to be a full observability platform, and that's exactly why it's worth having — it answers "is everything okay right now" in about the time it takes the page to load. Add your NAS or a busy VM next, and you'll start noticing resource problems well before they turn into an actual outage.