For the longest time, I used to ssh into my home servers and then use top or htop to check their resource usage. To keep an eye on my Docker containers, I would run Docker stats, I would run docker stats or docker ps. I’d use basic shell commands to check disk and network usage too. Or systemctl to view systemd services. It gets pretty annoying when you have all your services spread across multiple little servers. One of my co-workers told me about Beszel, and it has saved me from all that monitoring headache.
Beszel is the nicest system monitor I’ve ever seen
You can monitor all your servers and services in one place
Beszel is a featherweight, self-hostable platform where you can monitor all your servers in one place. It’s simple to set up (I got mine running and monitoring two services in about five minutes).
You just add a “system” that you want to monitor to the Beszel dashboard, and it’ll start tracking and display stats in real time. By default, it shows system-wide CPU and memory usage. You can also see system-wide disk and network usage. The data is displayed as these fancy interactive graphs. It’ll also show you CPU, RAM, disk I/O, and network I/O for Docker specifically (if you have it installed on your server). You can filter these results by different time intervals.
Speaking of Docker, you can choose if you want to monitor Docker containers or Linux binaries. If you choose the Docker setup, Beszel will show you all your active Docker containers in one place. You can see exactly how much CPU, memory, and bandwidth each container is consuming. You’ll also find helpful info like status, last update, port, container health in the Docker container table.
Compared to something like Portainer, Beszel feels so much lighter, both in its satisfying interface and resource usage.
Choosing the binary setup not only shows you all your running Docker containers, but also all the running Systemd services. The Beszel dashboard will give you a bird’s eye view of active services, their CPU and memory usage, as well as their uptimes.
Uptime Kuma is another lightweight monitoring service, but it’s meant to track uptime for individual services, not monitoring the server hardware.
There’s an option to set up notification alerts too. You can configure Beszel to send you email alerts or notifications if a server goes down or its temperature, CPU, memory, or GPU usage spikes past a threshold. I have no need for this feature, but for servers where stability is a priority, you’ll definitely want to set this up.
Spinning up a Beszel instance
Runs as a simple docker container
Let’s set Beszel up. You can run Beszel as a Docker container and access it in your browser.
Even if you are adding multiple servers to the Beszel dashboard, you only need to run the Docker container on one. I’ll show you how you can add other servers to the dashboard.
Open a terminal on your server and create a new directory for Beszel
mkdir beszel && cd beszel
Now let’s create a Docker Compose file to spin up the container for it.
nano docker-compose.yml
Paste this into the empty docker-compose.yml file.
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
ports:
- "3000:8090" # Host port 3000 -> container port 8090
volumes:
- ./beszel_data:/beszel_data
I’ve mapped the port to 3000 (what I’ll type in the browser to access the Beszel web UI.) You can choose whichever port you like.
Let’s run the new container.
docker compose up -d
Open the web browser and type in the server IP, followed by the host port. It’s 3000 in my case. Sign up with an email and password (the email can be anything random.)
Adding your first server monitor
Two kinds of system monitors for your servers
To monitor only Docker containers, click the “Add System” button and switch to the Docker tab. Give the system monitor a name and add the public IP address of your target server.
The default port is 45876. You can leave it as that. However, if you’re trying to connect to the same server that Beszel is running on, you can also use the host port you set in the compose file. It’ll work either way in that case.
Click the caret button on the Docker compose button and select Docker Run. It’ll show a command to copy.
Paste that into your target server and run it. Once that’s done, click “Add System.” Wait for the system monitor to become active.
If you want to add a system binary monitor, the process is exactly the same, except you choose the Binary tab this time. Give it a name, the public IP address, leave the default port 45876.
Click Copy Linux Command to copy the curl command it highlights for you. Paste it into your target server. Upon a successful run, Beszel will confirm the port it’s using.
It also lets you connect FreeBSD, Windows, and macOS systems.
Click Add System and wait for the little dot to go green.
- Size
-
3.74 x 2.95 x 1.1 inches
- PSU
-
3.5A USB-C (UL Listed)
- USB ports
-
2 × USB 3.0, 2 x USB 2.0
- HDMI ports
-
2 × micro HDMI
Easily the best server monitor for hobbyists
I’ve tried dozens of self-hosted homelab monitors, but they’re either too complicated to set up or they hog resources. Beszel is the only server monitor I’ve found, which has all the necessary features and just works.



