综合 用 Docker Compose 跑 Beszel:hub 加 agent 两段式,把 Docker 与 SMART 收进一个面板

2026-10-30 21:32:24

用 Docker Compose 跑 Beszel:hub + agent 两段式,8090 端口起一个自托管监控面板

项目地址:https://github.com/henrygd/beszel
文档:https://beszel.dev

Beszel 是一个用 Go 写的轻量服务器监控平台,带 Docker 统计、历史数据和告警,Web 界面开箱即用,支持多用户、OAuth/OIDC、API 访问,以及备份到磁盘或 S3 兼容存储。适合自己管 VPS 或家庭服务器、又不想为监控单独占一整套资源的人。

架构:hub 和 agent 各管一段

Beszel 分两个组件。hub 是基于 PocketBase 的 Web 应用,提供面板、账户、历史数据和告警;agent 跑在每台被监控的机器上,采集指标后推给 hub。也就是说,hub 只有一份,agent 按机器数量铺开,两者之间通过 token/key 或通用 token 建立信任。

用 Docker Compose 起 hub

官方给出的 compose 把 hub 和本地 agent 写在同一个文件里:

services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
environment:
APP_URL: http://localhost:8090
ports:
- 8090:8090
volumes:
- ./beszel_data:/beszel_data
- ./beszel_socket:/beszel_socket
# healthcheck: test: ['CMD','/beszel','health','--url','http://localhost:8090']
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- ./beszel_agent_data:/var/lib/beszel-agent
- ./beszel_socket:/beszel_socket
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
LISTEN: /beszel_socket/beszel.sock
HUB_URL: http://localhost:8090
TOKEN:
KEY: ""

两个卷分工明确:beszel_data 存 hub 的数据,beszel_socket 是 hub 与 agent 之间的 unix socket 目录。agent 用 network_mode: host,并只读挂载 /var/run/docker.sock 以读取容器信息。

启动流程:

# 先把 APP_URL 改成实际访问地址(域名或公网 IP,含端口)
docker compose up -d

然后打开 http://localhost:8090 创建管理员账户,点右上角 Add System,对话框里会给出针对这台机器的 compose 片段或安装命令。在目标机器建好目录、同样 docker compose up -d,回到对话框点 Add System,系统变绿即接通;变红就查文档里的 Common Issues。

本地 agent:unix socket 与 KEY/TOKEN 的顺序

上面的配置能直接起,但有个顺序不能省:在 Web UI 添加系统时,必须先把 KEY 和 TOKEN 换成你自己的公钥和 token,再重启 agent:

docker compose up -d

同时,在 UI 的 Host / IP 一栏填 unix socket 路径,而不是 IP:

/beszel_socket/beszel.sock

本地机器走 socket 的好处是不占端口、不经过网络栈,hub 和 agent 在同一台主机上时最省事。

远程机器:安装脚本或二进制

跨主机监控时,Add System 对话框会给出二进制安装命令,仅限 Linux。脚本会下载对应架构的二进制、创建 beszel 用户、启动 agent,并注册一个开机自启的服务,还可以选择每天自动更新。其他系统需要手动下载对应二进制,具体见文档的 Agent Installation / Compiling 页面。

0.12.0 起:通用 token 免预配置

从 0.12.0 开始,可以在 /settings/tokens 生成通用 token,agent 用它就能连上 hub,不需要事先在 UI 里逐个预配置系统。批量铺 agent 时这条路更顺:先发 token,再在机器上起 agent,最后回面板确认。

能采集什么

  • CPU 使用率(宿主机与 Docker/Podman 容器)
  • 内存使用(宿主机与容器,含 swap 和 ZFS ARC)
  • 磁盘使用(多分区/多设备)、磁盘 I/O
  • 网络使用(宿主机与容器)、网络响应时间与中断
  • 负载、温度、风扇转速(Linux 经 /sys/class/hwmon)
  • GPU 使用率与功耗(Nvidia、AMD、Intel)、电池电量
  • 容器状态与指标
  • S.M.A.R.T. 磁盘健康(含 eMMC 磨损/EOL,以及通过 sysfs 读 Linux mdraid 阵列健康)
  • ZFS:池容量、使用率、健康状态、I/O 吞吐、scrub 状态、按数据集的用量

告警覆盖大部分指标,通知渠道包括 Bark、Discord、Gotify、Google Chat、Ntfy、Pushover、Slack、Telegram、Twilio、WeCom、Matrix、MQTT、OpsGenie 等。

和 Prometheus + Grafana、Netdata 怎么取舍

Beszel 的定位是“够用且轻”:单个二进制、内存占用小、配置少,装上就有面板、历史数据和告警,不用先搭一套 TSDB 和查询语言。代价是指标粒度不如 Prometheus——它不提供 PromQL 那种自由聚合与长期高精度采样,也不适合做复杂的多源关联查询。

和 Netdata 比,Beszel 的采集项更聚焦在主机与容器的关键指标,面板和告警是内置的一体化流程,不需要额外接 Grafana。反过来说,如果你需要自定义仪表盘、跨系统的大范围指标计算,或者已经有一套 Prometheus 生态,Beszel 更适合当补充而不是替代。

对几台到几十台 VPS/家庭服务器来说,docker compose up -d 加上一个 unix socket 路径,基本就是全部安装成本。

复制全文 生成海报 自托管 监控 Docker 运维工具 Beszel

推荐文章

程序员茄子在线接单