Independent testing Updated April 2026 387 self-hosting guides 5 VPS providers tested

guide

Self-Hosting with Beszel: Monitor Your Entire VPS Fleet

Learn how to use Beszel for self-hosted server monitoring. Multi-server setup, alerts, integrations, and real-world use cases for homelabbers.

Self-Hosting with Beszel: Monitor Your Entire VPS Fleet

Once you have more than one server, you need visibility โ€” and you need it without paying for SaaS monitoring tools or running a heavyweight observability stack. Beszel fills that gap cleanly. It is a lightweight, self-hosted server monitoring dashboard that aggregates system metrics from multiple machines into a single interface. This article covers why Beszel stands out, how to set it up for multi-server environments, and how to make it work in production.

Why Beszel for Self-Hosted Monitoring?

Most self-hosted monitoring solutions fall into two camps: too simple (just uptime checks) or too complex (full Prometheus + Grafana stacks). Beszel sits in between โ€” it provides actionable system metrics without requiring you to learn PromQL or maintain a multi-container observability platform.

Key advantages:

ProviderPriceRAMStorageStandout Feature
Hetzner Cloud4.15 EUR/mo4 GB40 GB NVMeBest EU value
Contabo VPS5.99 EUR/mo8 GB200 GB NVMeMax storage retention
Linode (Akamai)5 USD/mo1 GB25 GB SSDAffordable global
Vultr6 USD/mo1 GB25 GB SSD32 locations
DigitalOcean6 USD/mo1 GB25 GB SSDEasiest onboarding

Monitoring Use Cases

1. Homelab Fleet Monitoring

If you run several VPS instances, a NAS, and a local server, Beszel gives you a single pane of glass. Install the agent on every machine and view all metrics from one URL. No need to SSH into each box to check if a disk is filling up.

2. Production VPS Oversight

Self-hosters running apps like Nextcloud, Gitea, or Mastodon can use Beszel to correlate spikes in CPU or memory usage with traffic events. The historical charts make it easy to identify resource trends before they become outages.

3. CI/CD Build Server Monitoring

If you run Woodpecker CI, Drone, or Gitea Actions, build jobs can spike CPU and memory. Beszel lets you see exactly when build jobs are taxing your server and make rightsizing decisions.

4. VPN and Network Appliance Monitoring

Agents can run on WireGuard or headscale nodes, reporting network throughput and system health without exposing those servers to public internet.

Multi-Server Setup

Architecture

[Monitored Server 1] -- beszel-agent --> [Beszel Hub VPS:8090]
[Monitored Server 2] -- beszel-agent --> [Beszel Hub VPS:8090]
[Monitored Server N] -- beszel-agent --> [Beszel Hub VPS:8090]

The hub is your central VPS. Each monitored server runs the agent, which polls local metrics and reports them to the hub.

Deploying the Hub

docker run -d \
  --name beszel \
  --restart unless-stopped \
  -p 8090:8090 \
  -v beszel_data:/beszel_data \
  henrygd/beszel

Deploying Agents at Scale

For each monitored server, generate a key in the Beszel dashboard (Add Server), then run:

docker run -d \
  --name beszel-agent \
  --restart unless-stopped \
  --network host \
  -e KEY="<server-specific-key>" \
  henrygd/beszel-agent

You can automate agent deployment across your fleet with Ansible. Example task:

- name: Deploy Beszel agent
  community.docker.docker_container:
    name: beszel-agent
    image: henrygd/beszel-agent:latest
    restart_policy: unless-stopped
    network_mode: host
    env:
      KEY: "{{ beszel_agent_key }}"

Alerts and Notifications

Beszel supports webhook-based alerts. You can configure thresholds for:

Setting Up a Discord Alert

  1. In your Discord server, go to Server Settings > Integrations > Webhooks and create a new webhook.
  2. Copy the webhook URL.
  3. In Beszel, go to Settings > Notifications, add a new webhook, and paste the URL.
  4. Configure per-server alert thresholds in the server settings panel.

Setting Up a Slack Alert

Use the same webhook flow โ€” create an incoming webhook in Slackโ€™s app directory, copy the URL, and add it in Beszelโ€™s notification settings.

Integrations

Reverse Proxy with Caddy

monitor.yourdomain.com {
    reverse_proxy localhost:8090
}

Caddy handles automatic HTTPS via Letโ€™s Encrypt.

Backup with Restic

Since Beszel uses SQLite, backups are simple:

restic -r s3:s3.amazonaws.com/your-bucket backup /var/lib/docker/volumes/beszel_data/_data/

Schedule with cron:

0 3 * * * restic -r s3:s3.amazonaws.com/your-bucket backup /var/lib/docker/volumes/beszel_data/_data/ --quiet

Uptime Kuma Companion

Beszel handles system metrics; Uptime Kuma handles service health checks. Running both on the same VPS gives you comprehensive coverage โ€” Beszel tells you if a server is struggling, Uptime Kuma tells you if a specific service is down.

Performance and Retention

Beszelโ€™s SQLite database grows as you add servers and increase retention windows. Rough estimates:

Contaboโ€™s 200 GB NVMe easily handles even large fleets for years without needing to trim historical data.

FAQs

Is Beszel secure to expose to the public internet?

Use HTTPS via a reverse proxy and set a strong admin password. Beszel does not currently support multi-user authentication or OIDC, so it is best accessed over a VPN or reverse proxy with additional auth (e.g., Authelia or Caddyโ€™s basicauth).

Can Beszel replace Grafana + Prometheus for basic monitoring?

For system metrics on a small to medium fleet (under 100 servers), yes. Beszel covers the core metrics that most self-hosters need without the operational complexity of a full Prometheus stack. For custom metrics, log aggregation, or alerting pipelines, a Prometheus-based stack is more appropriate.

How do I update Beszel?

Pull the latest image and recreate the container:

docker pull henrygd/beszel:latest
docker compose down && docker compose up -d

Your data persists in the named volume.

Self-hosting with Beszel is one of the most efficient ways to maintain visibility across a distributed VPS fleet without operational overhead. For more VPS recommendations, see our full comparison.