Skip to content

Beszel

Lightweight Server Monitoring Platform

Beszel is a lightweight, self-hosted server monitoring hub written in Go. It provides real-time and historical monitoring with Docker container statistics, system metrics, and customizable alerts - all in a beautiful web interface that uses less than 10MB of RAM.

Why Choose Beszel?

  • Ultra lightweight - hub uses < 10MB RAM
  • Docker-aware - per-container resource monitoring
  • Historical tracking - time-series data with alerts
  • Simple setup - single binary with web dashboard

Install

Infrastructure as Code

This Beszel instance is deployed using OpenTofu with custom Incus images. The infrastructure configuration manages container provisioning and persistent storage.

Custom Beszel Image

The Beszel Incus image is built and maintained at forgejo.benoit.jp.net/Benoit/Laminar.

Infrastructure Configuration

The OpenTofu configuration provisions:

  • Incus instance running custom Beszel image
  • One persistent storage volume:
    • /opt/beszel/beszel_data - Hub database and configuration
OpenTofu Configuration
resource "incus_storage_volume" "beszel_opt_beszel_beszel_data" {
  name = "beszel_opt_beszel_beszel_data"
  pool = incus_storage_pool.default.name
  config = {
    "initial.gid" = "1001"
    "initial.uid" = "1001"
    "initial.mode" = "700"
  }
}

resource "incus_instance" "beszel" {
  name  = "beszel"
  image = "laminar.incus:beszel-0.12.3-1benoitjpnet"

  device {
    name = "opt_beszel_beszel_data"
    type = "disk"
    properties = {
      path   = "/opt/beszel/beszel_data"
      source = incus_storage_volume.beszel_opt_beszel_beszel_data.name
      pool   = incus_storage_pool.default.name
    }
  }
}

Deploy Infrastructure

Apply OpenTofu configuration
tofu apply

Initial Configuration

After provisioning, access the Beszel Hub web interface to complete setup.

First-Time Setup

On first access, Beszel will prompt you to:

  1. Create admin user with username and password
  2. Configure hub settings (optional)
  3. Add monitored systems by installing agents

Adding Monitored Systems

To monitor additional systems, install the Beszel agent on each host:

Agent Installation:

On the system you want to monitor
# Download and install Beszel agent
curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh
chmod +x install-agent.sh
sudo ./install-agent.sh

Then add the system in the Beszel Hub web interface using the agent's connection details.

SSH Tunnel Connection

Beszel supports SSH tunnels for secure agent-to-hub communication. Configure SSH settings in the hub when adding a new system for encrypted monitoring connections.

Upgrade

Incus Image Upgrade

Upgrading Beszel is straightforward since the /opt/beszel/beszel_data volume persists independently of the container.

Update OpenTofu configuration

Edit your OpenTofu configuration file to update the image version:

resource "incus_instance" "beszel" {
  name  = "beszel"
  image = "laminar.incus:beszel-NEW-VERSION"  # Update this line
  # ...
}

Apply infrastructure changes

Recreate container with new image
tofu apply

The container will be recreated with the new image while the data volume remains intact.

Verify upgrade

Navigate to the Beszel Hub web interface and verify:

  • All monitored systems are visible
  • Historical data is preserved
  • Alerts are still configured
  • Dashboard displays correctly

Upgrade Complete

Your Beszel instance is now running on the new Incus image with all monitoring data intact!

Monitoring Features

What Beszel Monitors

  • Overall CPU usage percentage
  • Per-core utilization for multi-CPU systems
  • Load averages (1min, 5min, 15min)
  • CPU frequency and scaling information
  • Process count and thread statistics
  • RAM usage (used, free, available, cached)
  • Memory pressure indicators
  • Swap usage and activity
  • Buffer and cache statistics
  • OOM killer events if configured
  • Disk space per filesystem (used, available)
  • Disk I/O (read/write operations per second)
  • I/O throughput (MB/s read/write)
  • Inode usage for filesystem capacity
  • Disk latency measurements
  • Network bandwidth (inbound/outbound)
  • Packet rates and errors
  • Per-interface statistics for multiple NICs
  • Network connections count
  • Bandwidth usage over time

Related Documentation:

External Resources: