多 VPS 统一监控(三):Beszel(二)Agent 接入与告警

这是《多 VPS 统一监控》系列的第三篇。上篇把 Beszel Hub 跑起来了,这篇讲四台机器的 Agent 怎么接进来、我踩过的三个坑,以及 12 条告警规则和 Bark 推送。

给四台机器装 Agent

Hub 跑起来后,打开 https://monitor.nettodata.com,建管理员账号,然后点 Add System:填机器名(比如”博客主机”)、IP、端口(默认 45876),点保存——一定要点保存,这是第一个坑,后面细说。保存后页面会给出这台机器的一键安装命令,里面含一串完整的 ssh-ed25519 公钥。

把这条安装命令复制到被监控的机器上执行。Agent 是 v0.21.0,会装成 systemd 服务并监听 45876 端口。装完先在被监控机器上自查:

# Agent 服务状态
systemctl status beszel-agent --no-pager | head -5
# 端口是否在监听
ss -tlnp | grep 45876
# 正常应看到一行 LISTEN ... :45876

然后回到博客主机(Hub 这边),测一下能不能连上这台机器的 45876:

nc -zv <这台VPS的IP> 45876
# Agent 没装好时:Connection refused
# 装好后:succeeded

我当时就是这么一步步查的:RackNerd 1G 和 Bandwagon 刚加进 Hub 时状态是红的 down,在博客主机上 nc 它们的 45876 直接 Connection refused——说明这两台上 Agent 根本没装。装完 Agent 再测,端口通了,Hub 里状态翻成 up,CPU/内存/磁盘曲线就开始画了。

我四台机器是这么接进来的:博客主机(本机)、RackNerd 1G、Bandwagon、Dedirock。最后 Hub 里是这个样子——四台全绿:

Beszel 系统列表:四台 VPS 全部在线
Beszel 的 All Systems 页面:四台 VPS 状态全绿(截图中可见三台,Bandwagon 在下方需下滑查看)。红框标出的是每台机器的在线状态。

我踩过的三个坑

坑一:Agent 安装 Key 用错

第一次装 Hub 本机的 Agent 时,我从 Hub 的 Add System 对话框里复制 Key,结果只拷下来一串 16 位短码,小缪直接把它当 -k 参数用了,Agent 启动报 no key found。正确的是复制完整的 ssh-ed25519 AAAA… 公钥。教训:Key 必须完整,少一个字符都不行。

顺带一提,Agent 日志里如果看到 must set TOKEN 的警告,不用慌——那只是表示没启用 WebSocket 主动拨号模式,我们用的 SSH-server 模式(Hub 主动连 Agent 的 45876)是正常的。

坑二:Add System 填完忘点保存

最迷惑的一个:Hub 本机的 Agent 明明装好了、45876 端口也通,但 Hub 列表里就是看不到这台机器。直接查 Hub 的 SQLite 数据库,systems 表是 0 行——原来我在 Add System 对话框里复制了安装信息,但没点保存,Hub 根本不知道有这台机器。点保存后状态立刻变 up。教训:填完表一定要保存,再去看列表。

坑三:直接写数据库后必须重启 Hub

Dedirock 那台的 System 记录我是直接插进 Hub 数据库的(当时图省事),结果 Hub 没反应——直接写库 Hub 不会热加载,必须重启 beszel-hub 容器,新记录才会被识别:

docker restart beszel   # 容器名就是 compose 里定的 beszel
# 重启后进 Hub 看,Dedirock 状态变为 up

教训:能走页面操作就走页面,非要动数据库的话,记得重启。

告警规则

机器接进来只是第一步,还得让 Beszel 在出问题时喊出来。我在 Hub 里建了 12 条规则(4 台机器 × 磁盘/CPU/内存各一条),阈值按第一篇定的来:

  • 磁盘:使用率 > 85% 持续 10 分钟;
  • CPU:> 90% 持续 10 分钟;
  • 内存:> 90% 持续 10 分钟。

通知走 Bark:在 Hub 的用户设置里填 Bark 的 webhook 地址(Shoutrrr 的 bark:// 格式,Beszel 原生支持),注意告警所属用户必须是 admin 角色,否则 webhook 不会触发——这也是我当时排查确认过的一个细节。(第一篇里磁盘的三级阈值是设计值;实际在 Beszel 里落的是下面这套统一规则。)

有个小插曲:规则建好当天下午,RackNerd 1G 的 CPU 告警真触发了(超过 90% 跑了 10 分钟),Hub 的 alerts_history 里留了一条记录。而且我的手机真的收到了这条 Bark 推送——当时我还纳闷这是真实情况还是演练,确认下来是真实触发的。所以 Beszel→Bark 这条链路也算端到端验收通过了。顺手提醒一句:Hub 的数据记得备份,丢了的话四台 Agent 要全部重新注册。

下一篇

下一篇《多 VPS 统一监控(四):Uptime Kuma》讲外部探测:10 个监控项怎么配(6 个 HTTPS + 4 个 SSH 端口)、证书和域名到期提醒怎么开、Bark 通知怎么接,以及一次故意搞挂服务的故障演练。

发表评论