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
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¶
Initial Configuration¶
After provisioning, access the Beszel Hub web interface to complete setup.
First-Time Setup
On first access, Beszel will prompt you to:
- Create admin user with username and password
- Configure hub settings (optional)
- Add monitored systems by installing agents
Adding Monitored Systems
To monitor additional systems, install the Beszel agent on each host:
Agent Installation:
# 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:
Apply infrastructure changes
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:
- Infrastructure Overview - Complete self-hosting architecture
- Docker Monitoring Best Practices - System monitoring guides
External Resources: