Monitoring your cloud server’s health is important for maintaining performance and preventing downtime. Yet many traditional monitoring tools such as Zabbix and Grafana require complex setup and configuration. Subscription-based tools like Datadog eliminate this complexity by offering monitoring-as-a-service, but they often come with pricing models that quickly add up as you scale.
In any case, both approaches are often overkill for basic server monitoring requirements, and this is where Beszel comes in.

Beszel is a lightweight, open-source monitoring tool created for developers and system admins who need a simple way to monitor server resources. It removes unnecessary complexity and offers an intuitive architecture that is easy to deploy and maintain.
Beszel can monitor the following server metrics:
- CPU usage
- Memory usage
- Disk usage
- Disk I/O
- Network usage
Beszel operates on a simple two-component system:
The Hub serves as the command centre for your monitoring infrastructure. It collects and visualises monitoring data from all your servers, stores historical metrics, manages alert thresholds, and provides a unified dashboard for your entire environment.
The Agents are lightweight processes installed on each server you wish to monitor. They collect system metrics (CPU, memory, disk usage, network traffic) and relay this information back to the Hub. Agents require minimal resources and have no dependencies, making them ideal for deployment on production systems.
Installing the Beszel Hub
There are several ways to install the Beszel Hub, but the easiest is to use the official quick installation script. This script installs the latest binary and creates a systemd service to keep it running after reboots. To install the Beszel Hub using the script, run the command below:
curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-hub.sh -o install-hub.sh && chmod +x install-hub.sh && ./install-hub.sh
The installation process is relatively quick and should end with a success message showing you which port the service is running on. By default, Beszel Hub runs on port 8090.
...
Loading and starting the Beszel Hub service...
Created symlink /etc/systemd/system/multi-user.target.wants/beszel-hub.service → /etc/systemd/system/beszel-hub.service.
The Beszel Hub has been installed and configured successfully! It is now accessible on port 8090.
To access the Hub, enter your server’s IP address in your browser’s address bar, followed by the Beszel port:
http://<SERVER-IP-ADDRESS>:8090
On the first visit, you’ll be prompted to create a local admin account, which you’ll use to manage your Beszel installation.

After logging in, you’ll be presented with an empty Hub dashboard.

Adding an agent
To monitor an existing cloud server, you’ll need to add an agent.
Click the “Add system” button in the top right corner, then switch to the “binary” tab in the popup window.
Enter a name for the server you wish to monitor and its IP address.
For increased security, it is recommended to use the server’s utility network IP address rather than its public IPv4 address. The utility network is a private, account-wide secure connection that automatically links all your Cloud Servers across data centres. By using this network for your traffic, you keep your monitoring communications isolated from the public internet, reducing potential attack vectors. You can find your server’s utility IP address in the server’s Networking tab in the UpCloud Control Panel.
You can leave the port as the default value (45876). This port establishes communication between your Hub and agent. Feel free to change it if needed, but make sure the port isn’t blocked by your firewall.

Next, click “Copy Linux command” to view the installation command for the agent component.
Copy this command to your clipboard, close the window, and click “Add system”.
Now, connect to the server you want to monitor via SSH. Once connected, paste the copied command into your terminal to start the installation.
install-agent.sh && ./install-agent.sh -p 45876 -k "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHq+HgsmMu8s1ugJwvygli0+n3RanqZ9BGpKKK7TSx/2"
Creating a dedicated user for the Beszel Agent service...
usermod: group 'docker' does not exist
Creating the directory for the Beszel Agent...
Downloading and installing the agent...
Downloading and installing agent version 0.10.2 from https://github.com ...
######################################################################################################## 100.0%
Creating the systemd service for the agent...
Loading and starting the agent service...
Created symlink /etc/systemd/system/multi-user.target.wants/beszel-agent.service → /etc/systemd/system/beszel-agent.service.
...
...
When prompted during installation, type ‘y‘ and press Enter to enable automatic daily updates for the beszel-agent.
Would you like to enable automatic daily updates for beszel-agent? (y/n): y
Setting up daily automatic updates for beszel-agent...
Created symlink /etc/systemd/system/timers.target.wants/beszel-agent-update.timer → /etc/systemd/system/beszel-agent-update.timer.
Automatic daily updates have been enabled.
Beszel Agent has been installed successfully! It is now running on port 45876.
After installation, the agent’s status in the Beszel Hub will initially show “down” (red dot). Once the installation is complete and the agent successfully connects to the Hub, the status will change to “up” (green dot). Your server metrics should begin appearing in the dashboard within a few minutes.
If the status doesn’t change after a while, you might need to verify that both servers can communicate with each other. In particular, ensure that the selected port (default 45876) isn’t being blocked by your firewall.


Configuring Firewalls for Beszel
Beszel uses a hub-agent architecture, so specific ports must be opened to allow proper communication. For it to function properly, you need to allow:
- Hub: Incoming connections on port 8090 for web dashboard access
- Agents: Incoming connections on port 45876 for the Hub to collect metrics
Monitoring multiple storage devices
For servers with multiple storage devices, such as those separating system files from application data, Beszel lets you monitor each disk individually.

Before configuring Beszel to monitor additional storage devices, you first need to identify the disks and partitions on your system. Use the lsblk command to list all block devices:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 253:0 0 25G 0 disk
├─vda1 253:1 0 1M 0 part
└─vda2 253:2 0 25G 0 part /
vdb 253:16 0 50G 0 disk
└─vdb1 253:17 0 50G 0 part /mnt/data
The example lsblk output above shows a server with two disks:
- vda – a 25GB disk with the root partition (vda2)
- vdb – a 50GB disk with one partition (vdb1) mounted at /mnt/data
To monitor multiple disks, you need to modify the agent’s service configuration. Beszel uses two key environment variables for disk monitoring:
- FILESYSTEM – Specifies which device or partition to use for the main “Disk Usage” panel
- EXTRA_FILESYSTEMS – Specifies additional disks or partitions to monitor.
It’s better to monitor specific partitions (like vda2, vdb1), but you can also use mount points (like / or /mnt/data) instead of device names
On the server being monitored, edit the beszel-agent service file:
sudo nano /etc/systemd/system/beszel-agent.service
Find the [Service] section and add or modify the environment variables:
[Service]
Environment="FILESYSTEM=vda2" # our main partition
Environment="EXTRA_FILESYSTEMS=vdb1" # our extra partition
In this example:
- vda2 is set as the primary disk (the root partition)
- vdb1 is set as an additional disk to monitor
After modifying the service file, reload the systemd configuration and restart the beszel-agent:
sudo systemctl daemon-reload
sudo systemctl restart beszel-agent
When the agent restarts, return to your Beszel Hub dashboard. You should now see separate panels for each disk:
- The main “Disk Usage” panel showing your root partition (vda2)
- Additional panels for each extra disk (e.g., “vdb1 Usage”)

Each disk will also have its own I/O monitoring panel showing read/write activity.
If you don’t see the additional disks right away, give it a few minutes for the metrics to collect and display.
Conclusion
Now that you have successfully set up your Beszel Hub, you can access it using your server’s Public IPv4 address on the default port 8090. As a next step you can consider setting up a reverse proxy to allow you to access the app securely over https using a domain name instead of an IP address and port number.
For more advanced features and configuration options, check out the official Beszel documentation, which includes detailed guides and best practices. You can also stay up to date with the latest features, by following the project on GitHub.