IDEATOX

ideatox.com 面向中文开发者与数字工作者,记录 AI 工具、在线工具、隐私边界与工程实践。

用 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 端口。

Beszel 官方多服务器概览示例

官方图展示 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 路径,而不是随机换端口。

Beszel Hub、Agent 与本机资源的连接示意

图中的 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。正式恢复后再核对系统重新上线,观察新的数据是否继续进入历史。

继续阅读 · 自托管 返回顶部