OVERSEER.LOG
READING MODE
← 返回日志

// MONITORING / UPTIME KUMA

Uptime Kuma + QQ 邮件:一套够用的自托管告警

监控不一定要买服务。一个 Docker 容器、几个 HTTP/TCP 检查、一个能发信的邮箱, 再加上一条只在需要时打开的 SSH 隧道,就足够看住两台小服务器。

00 / 为什么自己跑

外部监控服务的好处是「不在同一台机器上」,坏处是要把内部地址暴露给它,或者依赖它的网络。 对我来说,更合适的组合是:监控机放在旧服务器上,离服务足够近;面板只监听回环, 需要看的时候再用 SSH 隧道进去。

这样做的代价是:如果旧服务器整个挂了,监控也会一起消失。所以它适合看「服务是否还活着」, 不适合当作唯一的异地可用性证明。

01 / 起一个只监听回环的容器

用 Docker 跑 Uptime Kuma,把端口绑在 127.0.0.1,数据放在命名卷里:

docker run -d \
  --name uptime-kuma \
  --restart unless-stopped \
  -p 127.0.0.1:3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:1

注意 -p 127.0.0.1:3001:3001,不要写成 -p 3001:3001。 前者只允许本机访问,后者会监听所有网卡,等于把管理后台暴露到局域网甚至公网。

02 / 监控项怎么选

第一版不需要太多指标,覆盖「入口、源站、内网服务」三类就够:

检查间隔不用太激进。30 到 60 秒一次已经能覆盖大多数故障,频率太高只会让日志和告警更吵。

03 / 邮件通知

Uptime Kuma 支持 SMTP。以 QQ 邮箱为例,需要先在邮箱设置里开启 SMTP 服务并生成授权码, 然后在通知里填写:

不要把授权码写进文章或仓库。
它只应该保存在 Uptime Kuma 的数据库里。如果曾经出现在聊天记录或截图中, 去邮箱后台重新生成一个,旧的会立即失效。

建好通知后,点一次「测试」确认能收到信,再把通知绑定到具体监控项。 否则很容易出现「监控显示正常,但从来没收到过告警」的假安全感。

04 / 面板只走 SSH 隧道

管理后台不需要公网域名。需要查看时,在本机开一条本地转发:

ssh -N -L 3001:127.0.0.1:3001 -p 9321 [email protected]

然后浏览器访问 http://127.0.0.1:3001。关掉终端,入口就消失了。

05 / 备份与升级

数据都在 Docker 卷里。升级前先备份,迁移时整卷带走:

docker stop uptime-kuma
docker run --rm -v uptime-kuma:/data -v "$PWD":/backup \
  alpine tar czf /backup/uptime-kuma-backup.tar.gz -C /data .

docker start uptime-kuma

不要删除这个卷,也不要随手执行会清理未使用卷的 docker volume prune。 监控历史、通知配置和管理员密码都在里面。

06 / 它的局限

监控机看不见另一台服务器的 127.0.0.1,也不能监控自己所在机器之外的本地回环服务。 如果一定要覆盖,需要让服务监听内网地址、加一个 push 心跳,或者在目标机器上再放一个探针。

这套方案不追求大而全,只追求「出事时手机能响」。对一个人的 Homelab 来说,够用了。