新手也能上手的服务器监控方案:Docker 一键部署 Beszel

目前我手里有几台 VPS,希望能在同一个页面集中查看这些服务器的运行情况,比如磁盘占用、内存使用率、CPU 负载等。
一开始,我用的是一种比较“原始”的方式:
通过 Termius 同时开四个窗口,每个窗口连一台 VPS,然后手动运行 htop,靠这种方法来观察各台服务器的实时状态。
这种方法有个明显优点:实时性确实很强,CPU 和内存的波动几乎可以立刻反映出来。但它的问题也同样明显。

使用 Termius 多窗口 + htop 查看多台 VPS 的实时运行状态
首先,这种方式极不方便。
每次重启电脑都得重新连上服务器,再手动敲 htop。就算通过配置让它登录后自动启动,整体体验依然称不上友好。
其次,还有个更致命的限制:
只能在特定的一台电脑上查看。
离开这台设备,或者临时换用手机、平板,就没法随时掌握 VPS 的运行情况。
基于这些痛点,我开始考虑换一种方案:
在尽量不拖累服务器性能的前提下,把所有 VPS 的运行状态统一展示在一个网页上,这样无论人在哪、身边是什么设备,都能直接打开页面查看。
至于“实时程度”,我并不强求到秒级。
秒级刷新的确更“酷”,但也意味着更高的资源消耗,而且要对网络稳定性和多机通信提出更高要求。
所以我的权衡是:
优先考虑低资源占用,其次是可视化展示,实时性可以适当放宽。
就算有十秒左右的延迟,对我来说完全能接受。
在这个前提下,其实现有方案不少,比如哪吒监控、Komari 等,它们通常能做到非常高的刷新频率,但同时也会占用更多系统资源,适合对实时性极度敏感的场景。
而 Beszel 走的是另一条路。
它定位为轻量级服务器监控:不追秒级刷新,而是用更低的资源占用换来一个简洁直观的状态总览页面,更适合“平时看看整体健康状况”的需求。
所以,这里更多是选择取向的问题,而不是谁更“高级”:
- 如果你极度看重实时数据,可以选更偏“重型”的监控方案;
- 如果你更在意轻量、低占用、部署简单,那 Beszel 会是很合适的选择。
在真正动手之前,我对 Beszel 多少有些顾虑:
只要涉及跨多台 VPS 统一监控,基本就意味着每台机器都要部署 Agent 程序,然后做一些连接配置,一听就不太像“简单方案”。
但实测下来发现,它的搭建过程比想象中顺滑很多。
核心步骤就是:在每台 VPS 上装好 Docker,然后跑几条容器命令。
面板和 Agent 都支持容器部署,对已经习惯 Docker 的人来说几乎是“复制粘贴式”操作,这种思路和部署 PanCheck、AdGuard Home 等 Docker 化服务是类似的,都是通过 docker-compose 或 docker run 快速拉起来,然后在浏览器中做可视化管理。[1][2][3]
下面就具体分享一下,我是 如何用 Docker 搭建 Beszel 这套轻量级服务器监控系统 的。
- beszel 项目网站:https://beszel.dev/zh/
- beszel GitHub 地址:https://github.com/henrygd/beszel
Docker 一键部署 Beszel(面板端)
在正式操作之前,先理清目标,避免后面步骤容易混淆。
部署目标说明
我们要实现的目标是:
在一台 VPS 上部署 Beszel 面板,用来统一监控其它多台 VPS 的运行状态。
也就是说:
- 只需要 一台服务器 负责承载并展示监控页面(面板端);
- 每一台 VPS(包括这台面板机)都需要运行一个 Agent 容器,用来采集数据并上报。
默认环境说明
下面的操作以一个比较常见、也比较容易复现的环境为例:
- 一共 3 台 VPS
- 系统为 Ubuntu 20.04 / 22.04 / 24.04
- 拥有
root权限,或者可以使用sudo - 系统中已经安装 Docker
如果尚未安装 Docker,可以先通过官方脚本完成一键安装:
curl -fsSL https://get.docker.com | sh
(这类通过 Docker 部署自建服务的方式,在部署其他项目如 PanCheck、AdGuard Home 时也同样常见,方便快速迁移与管理。[1][2])
Beszel 的整体结构
先看一下 Beszel 的基本架构,有个整体印象会更容易理解后面的配置。
Beszel 采用的是 1 个面板 + N 个 Agent 的结构:
VPS-A(面板服务器)
├─ Beszel Dashboard(Web 页面)
├─ Beszel Agent
│
VPS-B
└─ Beszel Agent
VPS-C
└─ Beszel Agent
可以简单理解为:
- Dashboard(面板)
- 即你在浏览器中访问到的 Web 页面
- 整个集群只需要部署一套 Dashboard
- Agent
- 运行在每一台被监控 VPS 上,用来采集这台机器的系统状态并上报
- 包括面板所在的这台 VPS 自身也需要部署一个 Agent
选择一台 VPS 作为面板服务器
面板服务器理论上可以随便选一台,只要能正常对外提供 Web 访问即可,对配置没有特别苛刻的要求。
为了方便说明,下面统一假设:
- 面板服务器:
VPS-1 - 被监控服务器:
VPS-1 / VPS-2 / VPS-3
接下来的面板部署步骤,都在 VPS-1 上完成。
第一步:创建 Beszel 项目目录
我习惯把所有 Docker 项目统一放在 /opt 下,便于集中管理。
你也可以根据自己的喜好选择其它路径。
mkdir -p /opt/beszel
cd /opt/beszel
第二步:新建 Docker Compose 文件
在当前目录下创建 docker-compose.yml 文件:
nano docker-compose.yml
然后将以下内容完整粘贴进去:
services:
beszel:
image: henrygd/beszel
container_name: beszel
restart: unless-stopped
ports:
- "8090:8090"
volumes:
- ./data:/beszel_data
保存文件:
Ctrl + O→ 回车保存Ctrl + X退出编辑器
第三步:启动 Beszel 面板
在 /opt/beszel 目录中执行:
docker compose up -d
如果终端没有报错,说明容器已成功拉起。
你可以通过下面的命令再确认一下运行状态:
docker ps
看到 beszel 容器显示为 Up 状态即可。

使用 docker ps 确认 beszel 容器正常运行(Up 状态)
第四步:访问面板页面
在浏览器中访问:
http://VPS-1的IP:8090
如果页面能够正常打开,并显示出 Beszel 的初始界面,说明:
✅ Beszel 面板已经部署完成
到这里,面板端的部署工作就结束了,可以开始准备 Agent 端。

通过浏览器访问 beszel 面板页面
接下来要做的,就是在每一台 VPS 上部署 Beszel Agent,然后把它们添加到面板中,统一进行监控。
Agent 的部署步骤相比面板甚至更简单,基本就是复制一条命令执行即可。
在各台 VPS 上部署 Beszel Agent
面板部署完成后,下一步的任务就很清晰了:
在每一台需要纳入监控的 VPS 上运行 Beszel Agent。
有一点需要特别注意:
面板服务器本身同样需要部署一个 Agent。
也就是说,如果你一共 3 台 VPS,那么最终会有:
- 1 个 Beszel Dashboard(面板)
- 3 个 Beszel Agent(每台 VPS 各一个)
Agent 的作用是什么?
一句话概括:
- Agent 负责采集本机的运行状态
- CPU 使用率
- 内存占用
- 磁盘空间
- 网络流量等
- 然后将采集到的数据上报给面板,用于可视化展示
Agent 本身设计得比较轻量级,运行时常驻,但日常资源占用不高,适合部署在配置较小的 VPS 上。
第一步:在面板中创建 Agent 信息
在登录服务器运行命令之前,先在 Beszel 面板里完成 Agent 信息的创建,方便后面一键复制命令。
操作步骤:
- 打开 Beszel 面板
http://VPS-1的IP:8090 - 点击界面中的 Add System / Add Agent / 添加客户端(名称会随版本或语言略有差异)
- 在部署方式里选择 Docker
完成这一步后,Beszel 会自动为你生成一段完整的 docker run 命令,其中会包含一个类似 KEY=xxxxx 的参数,用于身份校验。


复制用于部署 Agent 的 docker run 命令
👉 这段命令非常关键,后续每台 VPS 部署 Agent 都要用到。
第二步:在 VPS 上运行 Agent 容器
接下来,分别登录你需要监控的各台 VPS(比如 VPS-2、VPS-3)。
第一次部署的时候,建议最稳妥的方式就是:
直接复制面板上生成的 docker run 命令,粘贴到 VPS 上执行(记得提前在该 VPS 安装好 Docker 环境)。

在 VPS 上运行 Agent 容器
如果你想提前了解一下命令结构,大致会是下面这种形式:
docker run -d \
--name beszel-agent \
--restart unless-stopped \
-v /:/host:ro \
-p 45876:45876 \
-e KEY="这里填写面板生成的 KEY" \
henrygd/beszel-agent
其中几个关键参数可以简单解释一下:
-v /:/host:ro
将宿主机系统目录以只读方式挂载到容器中,让 Agent 能够读取到系统各项指标信息-p 45876:45876
指定 Agent 对外暴露的端口,面板后续就是通过这个端口去拉取监控数据的-e KEY="..."
用于和面板进行身份校验的密钥
如果缺少这个 KEY,Agent 容器虽然可能能启动,但无法成功注册到面板
第三步:确认 Agent 是否正常运行
命令执行完后,可以用下面的命令查看容器状态:
docker ps
如果输出中能看到类似:
beszel-agent Up ...
就说明 Agent 容器已经正常跑起来了。

使用 docker ps 确认容器是否正常运行
第四步:在面板中添加这台 VPS
Agent 启动成功后,回到 Beszel 面板页面。
- 再次点击 Add System
- 填写必要信息:
- Name:自定义显示名称,例如
VPS-2 - Address:
VPS-2 的 IP:45876(即你在 docker run 命令里映射的端口)
- Name:自定义显示名称,例如
- 确认并保存
如果设置无误,稍等几秒钟,这台 VPS 就会出现在面板列表中,并开始展示各项运行指标。

在面板中添加这台 VPS
重复以上步骤
接下来按同样的方式操作:
- 在
VPS-1上也部署一个 Agent(面板机同样需要被监控) - 在
VPS-2、VPS-3分别部署 Agent - 在面板中依次添加对应的节点信息
完成后,你就能看到:
所有 VPS 的运行情况,都整齐地集中展示在同一个 Dashboard 页面中。

所有 VPS 的运行情况集中显示在同一个页面中
注意事项
刚部署完成、开始使用 Beszel 时,你可能会留意到:
- CPU / 内存等指标并不是“每秒一跳”;
- 页面上的数据可能会有几秒到十几秒的延迟。
这并不是系统异常,而是 Beszel 的产品设计取向:
它更注重 整体状态和趋势变化,而不是对瞬时波动进行毫秒级捕捉。这种思路与一些通过 Docker 进行周期性检测或监控的工具类似,借由适当降低实时性来换取更低的资源消耗和更好的系统稳定性。[1][3]
如果你的核心需求是:
- 在一个页面上集中查看多台 VPS 的健康状态;
- 部署成本尽量低;
- 服务器性能损耗尽量小;
那么用 Docker 一键搭建 Beszel,会是一个既简单又实用的选择。
热门话题
原创文章,作者:kp51,如若转载,请注明出处:https://www.kepu51.com/instant-messaging/464.html
