GICT knowledge base
Beszel: Lightweight Self-Hosted Server Monitoring Without the Overhead
Published
Most server monitoring guides assume you are running a cluster, have hours to set it up, and want to graph everything forever. That is fine if you are an SRE with a Kubernetes cluster. It is overkill if you have a VPS and want to know if your server is running hot.
Beszel is a self-hosted monitoring platform, MIT-licensed, that does not require a separate time-series database, a separate alerting service, or a computer science degree to configure. You deploy the hub, install an agent on each server you want to watch, and you are done.
The project hit v0.18.7 in April 2026 and has accumulated 2.3k stars on GitHub. People who have used it tend to say the same thing: it finally replaced Grafana for their homelab because Grafana was never worth the setup time for a handful of servers.
How Beszel Works
Beszel has two moving parts. The hub is the web interface. You deploy it on one server or locally, and it is where you see all your metrics in one place. The agent runs on every system you want to monitor, collects metrics, and pushes them back to the hub over a secure connection. The hub stores everything in an embedded SQLite database through PocketBase, which also handles user accounts, authentication, and backups.
The agent-initiated connection means you do not need to expose any ports on the systems you are monitoring. All your servers stay firewalled off. That is a meaningful security property that push-based tools cannot easily offer.
What Beszel Tracks
The list is longer than you would expect from something this small. Beszel monitors CPU usage, memory (including swap and ZFS ARC), disk usage across multiple partitions, disk I/O, network traffic, load average, and temperature from hardware sensors. It reads GPU metrics from NVIDIA, AMD, and Intel GPUs. It tracks battery status. And it pulls per-container stats from Docker and Podman, including CPU, memory, and network usage history for each container.
For disk health, Beszel reads S.M.A.R.T. data and can surface eMMC wear levels and Linux mdraid array status. If you run a server with redundant disk arrays, that alone is worth having in one view.
Setting Up the Hub
The quickest path is Docker Compose. The hub image is small and the configuration takes a few lines.
services:
beszel:
image: henrygd/beszel
ports:
- "8090:8090"
volumes:
- beszel_data:/pb/pb_data
restart: unless-stopped
volumes:
beszel_data:
Open http://your-server:8090, create your admin account, and you are in. The web interface does not require SSL for local access, but the copy-to-clipboard function needs a secure context. If you expose it publicly, put it behind a reverse proxy with a valid certificate.
Adding Your First Server
Log into the hub and click Add System. Give the server a name and IP address. The hub generates a Docker Compose snippet for the agent. Copy it to the server you want to monitor and run it.
services:
beszel-agent:
image: henrygd/beszel-agent
restart: unless-stopped
volumes:
- /:/host:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
The agent reads from the host filesystem and optionally from the Docker socket. It connects back to the hub using an encrypted key. The hub detects the new agent within a minute and starts recording metrics.
Alerts
Beszel supports threshold-based alerts for CPU, memory, disk, bandwidth, temperature, load average, and container status. You can set warning and critical levels separately. Alerts go out via email or webhook, which means you can route them to ntfy, Pushover, or any endpoint that accepts incoming webhooks.
There is no built-in on-call rotation or escalation chains. For a homelab or small team that is fine. You set the threshold, point it at your phone, and move on.
Authentication and Backups
Beszel supports OAuth 2 and OIDC, so you can log in with Google, GitHub, or any compatible provider and disable password authentication entirely. Multi-user is supported with the ability to share systems between users without sharing credentials.
Backups store to a local path or any S3-compatible storage. Beszel backs up its database and configuration, so you can restore the full monitoring state on a new install in minutes.
When Beszel Is the Right Tool
Beszel is not trying to replace Prometheus or Grafana for large-scale infrastructure. It is designed for people who have a few servers, want to see what is happening on them, and do not want to wire together a metrics pipeline to do it.
If you are paying for Pingdom or UptimeRobot and only using a fraction of what they offer, Beszel covers the basics for the cost of a cheap VPS to run the hub. Your monitoring data stays on your own infrastructure, not in a third-party dashboard.
Run Beszel on an Interserver VPS and you have a monitoring hub watching your other servers without touching the resources of the machines you are actually trying to monitor.
Related guides
How to Self-Host DocuSeal for Document Signing
Self-host DocuSeal with private administrator setup, PostgreSQL and HTTPS. Test signing, understand email data flows and create consistent backups.
Self HostedHow to Self-Host Docmost with Docker on Ubuntu 24.04
Install Docmost with Docker, PostgreSQL and Redis. Set up a private workspace and verify editing, live updates and attachment retrieval.
Self HostedHow to Remove Image Backgrounds Locally with rembg
Remove image backgrounds locally with rembg. Preserve originals, check PNG transparency and inspect cutout quality on both light and dark backgrounds.
Self HostedHow to Translate Text Offline with Argos Translate
Translate plain text locally with Argos Translate. Install a language pair, prepare caches, verify offline operation and review translation quality.
