📡 Setup Beszel — Lightweight Server Monitoring Hub

Monitor CPU, RAM, disk, and network across all your servers from one clean dashboard. Beszel is fast, lightweight, and incredibly easy to deploy with Docker.

⚠️ This script is provided for demo and testing purposes only. Not intended for production use.

📦 Resources & Setup Scripts

Grab the automated bash script from GitHub to follow along with the video.

Automated install script — deploys Beszel hub in seconds.
View on GitHub

Quick Install:

wget https://raw.githubusercontent.com/mhmdali94/Docker/main/monitoring/beszel/beszel-ubuntu.sh
chmod +x beszel-ubuntu.sh
sudo bash beszel-ubuntu.sh

Tutorial Steps

1 Download & Run the Script

wget https://raw.githubusercontent.com/mhmdali94/Docker/main/monitoring/beszel/beszel-ubuntu.sh
chmod +x beszel-ubuntu.sh
sudo bash beszel-ubuntu.sh

2 Access the Web Dashboard

On first visit, register your admin account:

http://<your-server-ip>:8090

3 Add Servers to Monitor

Click Add System in the Beszel dashboard. You'll get a Docker command to run on each server you want to monitor — the agent will connect back automatically.

4 View Your Dashboard

Once agents connect, you'll see real-time CPU, RAM, disk, and network charts for each server. Beszel stores historical data so you can review trends over time.

Ports Used

PortPurpose
8090Beszel Web Dashboard

Overview

Beszel is a lightweight server monitoring hub that provides real-time and historical metrics for CPU, RAM, disk, network, and Docker containers. It uses a hub-and-agent architecture — the hub collects and displays data, while small agents installed on each server send metrics over SSH. No firewall changes are required on the monitored servers.

Why Use It

Beszel fills the gap between lightweight monitoring scripts and heavy observability stacks like Prometheus/Grafana. It gives you real-time and historical CPU, memory, disk, network, and Docker metrics across multiple servers from a single hub — without opening any inbound firewall ports on your monitored servers. The agent communicates outbound only over SSH, making it safe to deploy even on production machines with strict security postures. Setup takes minutes per server, not hours of configuration.

When You Need It

    Who Should Use It

      Real Use Cases

        Main Features

          How to Use After Installation

            Security Best Practices

              Ports and Firewall Notes

              The Beszel hub web UI listens on port 8090 by default. This should be reverse-proxied to HTTPS on port 443 — do not expose 8090 directly. The hub SSH service for agent communication listens on port 45876 (configurable). On monitored servers, NO inbound ports need to be opened — the agent connects outbound to the hub's SSH port. Your hub server needs inbound access on 8090 (proxied to 443) and 45876 from agent IPs. Optionally restrict 45876 to known server IPs for tighter security.

              Backup and Maintenance

                Common Mistakes

                  Troubleshooting

                    Alternatives

                    Prometheus with Node Exporter and Grafana is the most powerful self-hosted monitoring stack — far more capable than Beszel but requires significantly more setup and maintenance. Netdata provides per-second metrics with zero configuration but uses more resources and has a more complex multi-server setup. Uptime Kuma handles uptime and availability checks but not detailed performance metrics. Zabbix is an enterprise monitoring platform with much more feature depth but a steep learning curve. For very small setups, tools like Glances or htop with remote SSH access may be simpler than deploying a hub-agent monitoring system.

                    When Not to Use It

                    Beszel is not the right tool if you need application-level metrics (request rates, error rates, latency percentiles) — those require instrumentation and Prometheus or a similar APM. If you need compliance-grade monitoring with audit logs and access controls beyond basic RBAC, an enterprise platform is more appropriate. For organizations that already have a working Prometheus/Grafana or Datadog setup, adding Beszel creates redundant monitoring rather than replacing the existing stack. Also, Beszel's historical data retention is limited — for long-term trend analysis spanning months or years, a time-series database like InfluxDB is better suited.

                    Need Help Setting Up Beszel?

                    PrismaTechWork provides end-to-end infrastructure services — from initial deployment and security hardening to ongoing monitoring, automated backups, and dedicated support. Whether you need a single-server setup or a multi-site network, our team ensures your infrastructure is built right, secured properly, and maintained reliably.

                      Contact Us

                      Frequently Asked Questions

                      Do I need to open any inbound ports on the servers I'm monitoring?

                      No. The Beszel agent on monitored servers connects outbound only to the hub's SSH port. Your monitored servers don't need any inbound firewall rules for Beszel. Only the hub server needs inbound ports — the web UI port (8090, proxied to 443) and the agent SSH port (45876) need to be reachable from agent IPs.

                      How does Beszel compare to Netdata for server monitoring?

                      Netdata collects metrics with per-second granularity and auto-discovers most services with zero configuration — it's more powerful but uses more CPU and RAM. Beszel is simpler, lighter, and easier to set up for multi-server fleet monitoring. If you want deep, real-time performance analysis, Netdata is better. If you want a clean fleet overview with history and alerts, Beszel is a better fit.

                      Can Beszel monitor Docker containers?

                      Yes. With Docker socket access configured for the agent user, Beszel tracks per-container CPU, memory, network, and status. This is enabled per-server in the hub UI. The agent reads Docker stats through the socket — no changes to Docker or containers are needed.

                      What happens to metrics if the hub goes offline temporarily?

                      Agents store a small buffer of recent metrics locally. When the hub comes back online, agents reconnect automatically and resume sending data. There is no persistent metric store in the agent — a longer hub outage will result in a gap in historical data. The hub's database (SQLite) retains all historical data collected before the outage.

                      Is Beszel suitable for monitoring cloud VMs from different providers?

                      Yes. As long as the agent can reach the hub's SSH port (45876) outbound, it works across any network boundary — cloud VMs, on-premise servers, home lab machines, or a mix. This is a major advantage over tools that require inbound network access to the monitored server.

                      How do I update Beszel agents after a hub update?

                      Download the new agent binary from the Beszel releases page on GitHub, replace the existing binary on each monitored server, and restart the agent service with systemctl restart beszel-agent. If a hub update introduces a new agent API, the hub dashboard will typically warn you that agents need updating. Update the hub first, then agents.

                      Can multiple users share the Beszel hub dashboard?

                      Yes. Beszel supports multiple user accounts with different roles. Admin users have full control. Regular users can view dashboards and metrics without being able to add or remove servers. This makes it practical for teams where multiple people need monitoring visibility without all having administrative access.

                      How long does Beszel retain historical metric data?

                      Beszel stores metric history in its SQLite database. By default it retains a rolling window of data — shorter intervals for recent data and downsampled data for older periods. The exact retention period depends on configuration and available disk space. For long-term trend analysis beyond a few months, export to a dedicated time-series database.