用 Beszel 看清 VPS 的资源变化:Docker 部署、单机接入与告警验证
部署 Beszel Hub 和 Agent,通过 Unix Socket 监控本机,核对资源历史、告警和持久数据。
文章目录
网站忽然变慢时,临时打开终端看一次 CPU 并不总能找到原因。高峰可能已经过去,也可能是容器内存增长、磁盘接近满或备份同时运行。Beszel 可以把服务器和 Docker 容器的一些资源指标保存成历史曲线,方便把问题时间和实际变化对起来。
这类监控并不直接证明网站可用。CPU 很低时,数据库认证、域名或反向代理仍可能出错;网页健康检查正常,也不代表磁盘还有足够空间。资源监控和外部可用性检查各有用途,应该针对自己的问题安排。
部署前先确认 VPS 的磁盘、内存和公网访问条件,也可以查看雨云云服务器;注册时填写优惠码 KuZhuJi。
Hub 保存历史,Agent 读取被监控机器
Beszel 分成 Hub 和 Agent。Hub 提供账号、历史和告警管理界面,Agent 在需要观察的系统上读取指标。初次部署先把两个组件放在一台 Linux VPS 上,用 Unix Socket 连接,避免为了观察本机再公开一个 Agent 端口。

官方图展示 CPU、内存、磁盘和网络等概览列,适合先辨认哪台机器值得进一步检查。图中数据是项目演示内容,不能当作所选 VPS 的资源占用或性能成绩。
传感器、磁盘健康和其他硬件信息是否可用,取决于操作系统、权限与运行方式。普通 VPS 不一定提供底层物理硬盘数据;容器部署也不能保证看到主机上的所有传感器。先检查实际能收到的指标,不把缺少一列数据直接当成服务器故障。
先启动 Hub,拿到该实例的 Key 和 Token
准备独立目录:
mkdir -p ~/services/beszel/beszel_data
mkdir -p ~/services/beszel/beszel_socket
mkdir -p ~/services/beszel/beszel_agent_data
cd ~/services/beszel
首次只保存 Hub 服务为 compose.yaml:
services:
beszel:
image: henrygd/beszel:latest
environment:
APP_URL: http://localhost:18090
ports:
- "127.0.0.1:8090:8090"
volumes:
- ./beszel_data:/beszel_data
- ./beszel_socket:/beszel_socket
restart: unless-stopped
APP_URL 采用下面 SSH 转发后在浏览器中访问的地址。未来使用 HTTPS 域名时再替换,不在首次本地配置里填一个尚未可用的域名。镜像使用当前示例标签,正式使用前记录版本或摘要,Hub 和 Agent 的升级按官方发行说明安排。
docker compose config --quiet
docker compose up -d beszel
docker compose logs --tail=80 beszel
打开私人入口:
ssh -L 18090:127.0.0.1:8090 user@your-server
本机访问 http://localhost:18090,完成初始账号设置。在添加系统界面获取该实例给出的公钥和 Token。复制自己后台生成的内容,不使用教程里的占位值,也不要在公开截图中暴露 Token。
把 Agent 加进同一份 Compose
将完整文件改成以下内容,并在同目录的 .env 中保存 BESZEL_KEY 和 BESZEL_TOKEN。两项值从刚才的添加系统界面取得,.env 权限设为 600。
services:
beszel:
image: henrygd/beszel:latest
environment:
APP_URL: http://localhost:18090
ports:
- "127.0.0.1:8090:8090"
volumes:
- ./beszel_data:/beszel_data
- ./beszel_socket:/beszel_socket
restart: unless-stopped
beszel-agent:
image: henrygd/beszel-agent:latest
network_mode: host
environment:
LISTEN: /beszel_socket/beszel.sock
HUB_URL: http://localhost:8090
KEY: ${BESZEL_KEY:?fill public key}
TOKEN: ${BESZEL_TOKEN:?fill token}
volumes:
- ./beszel_agent_data:/var/lib/beszel-agent
- ./beszel_socket:/beszel_socket
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
Agent 使用宿主网络读取相应网络信息,不过监听位置指定为 Unix Socket。Hub 与它共享 beszel_socket,在系统的 Host / IP 栏填写 /beszel_socket/beszel.sock。Hub 容器内部的 localhost 不是宿主机,不能把这个栏位简单填成 localhost 来连接另一个网络中的 Agent。
chmod 600 .env
docker compose config --quiet
docker compose up -d
docker compose logs --tail=80 beszel-agent
KEY 与 Token 的用途不同。公钥用于相关连接的身份校验,Token 用来认证 Agent;按自己的 Hub 提供的配置填写,连接失败先核对两者、系统条目和 Socket 路径,而不是随机换端口。

图中的 Socket 连接用于本机接入,网页仍只开放回环端口。以后添加其他 VPS 时,为每台机器单独生成和记录接入配置,按官方支持的连接方式安排网络访问,不能把本机 Socket 路径照搬到远程机器。
准备独立实例时,可在雨云选择适合的云服务器配置,优惠码 KuZhuJi。配置按实际任务选择,数据库和附件另做备份。
Docker Socket 的挂载需要看清含义
Agent 挂载 Docker Socket 后可以读取容器统计。挂载参数里的 :ro 限制的是挂载文件系统写入,并不自动把 Docker API 变成只读 API。拿到 Socket 访问能力的进程具有重要权限,镜像来源、更新和后台访问都应控制。
若不需要容器统计,可以不挂载这一 Socket,但对应数据也可能不可用。Rootless Docker 使用的路径与权限不同,不要照抄普通 Docker 的 /var/run/docker.sock。先确认自己的运行方式,再按官方说明接入。
首次上线对照终端的当前负载、磁盘容量和容器列表,检查名称、单位和大致趋势。不同工具对内存、缓存、采样间隔的定义可能不同,不能要求每一秒的数字完全一致;明显缺项或一直不更新时,再看 Agent 日志和权限。
告警先用可控制的条件验证
为自己真正需要处理的指标设置告警。磁盘剩余空间不足适合提前提醒;短时 CPU 波峰可以观察持续时间后再触发,避免正常备份每次都发消息。阈值跟随服务用途,不直接把某个百分比当作所有 VPS 的通用标准。
在后台填写当前版本支持的通知渠道,先测试渠道可用。再用一个不会损坏业务的验证方式触发告警,例如临时设置便于满足的阈值,等待满足其持续时间,确认实际消息。收到后恢复正常阈值,并检查恢复或后续状态是否按预期处理。
不要为了测试磁盘告警把正式数据盘写满,也不要用高负载脚本冲击正在服务的机器。告警验证要确认条件与通知链路,没必要用真实事故制造证据。测试结束后把阈值和渠道设置记录下来,避免演练配置长期留在生产中。
需要增加服务器时,可以打开雨云选购页面,填写优惠码 KuZhuJi;迁移前保留数据与原有部署配置。
曲线用来追问题,也用来安排容量
网站每天固定时间变慢,先对照同一时间的备份、抓取和定时任务。单次峰值不能证明某台 VPS “性能差”,需要结合应用请求、日志和外部响应;磁盘趋势持续上涨,则应该检查附件、数据库或日志的增长来源。
需要迁移时,历史曲线可以帮助判断资源需求,但并不能预测换到另一个平台后的确切表现。监控数值保留单位和时间范围,不把一段低负载记录改写成能承载多少访问量的保证。
备份 Hub 数据,保存接入配置
Hub 中的历史、账号和设置在 beszel_data 中。Agent 的本地持久目录和 .env 也保留下来,便于恢复接入状态;Socket 目录是通信位置,不等于历史数据库。停服务做副本时,不需要打包正在使用的 Socket 文件。
mkdir -p backups
docker compose stop
tar -czf "backups/beszel-$(date +%F-%H%M%S).tar.gz" beszel_data beszel_agent_data .env compose.yaml
docker compose start
副本转移到服务器之外并限制访问。恢复测试先使用原镜像和独立路径,确认账号、历史和告警设置;测试副本停用正式通知,并且不要让两套 Agent 同时争用原来的 Socket。正式恢复后再核对系统重新上线,观察新的数据是否继续进入历史。
