服务器上跑着十几套 Docker 服务,最怕的不是出问题,而是出问题了没人知道。这篇文章聊聊我的三层监控方案:探针看状态、监控做告警、脚本自动保活。
一、为什么需要监控
我的主力服务器上跑着:WAF、代理面板、转发网关、监控、博客、游戏库、文件浏览……服务一多,"悄悄挂了"就成了常态。等某个服务挂了半天才发现,再抢救已经晚了。
所以监控的核心目标就一条:服务挂了,第一时间知道;能自动拉起,就自动拉起。
二、探针和监控不是一回事
| 类型 | 代表 | 干什么 |
|---|---|---|
| 探针 | ServerStatus 类 | 实时展示在线状态、CPU/内存/流量曲线,是"仪表盘" |
| 监控 | Uptime Kuma / Komari | 周期探测 + 失败告警(Telegram/Bark/邮件),是"报警器" |
探针负责"好看",监控负责"好用"。两者互补,但多数人只搭了探针,忘了监控。
三、轻量监控方案:Komari
我选的是 Komari:开源、Docker 一键部署、SQLite 存储(零外部依赖)、自带 Web 面板、支持 Telegram/Bark 等告警通道。部署就三行:
services:
komari:
image: ghcr.linkos.org/komari-monitor/komari:latest
restart: always
ports:
- "25774:25774"
volumes:
- ./data:/app/data
它的面板被我反代到一个子域名,手机上也能随时看:每个服务亮绿/红,失败会推告警到手机。
四、比监控更进一步:自动保活
光有监控还不够——服务挂了之后,我更希望它自己爬起来。于是写了个 keepalive.sh:定期遍历检查各容器健康状态,发现没在跑的容器就拉起来,再把结果汇报给监控。配一条 cron 每 5 分钟执行一次:
*/5 * * * * /www/docker_data/marzban/keepalive.sh >> /var/log/keepalive.log 2>&1
这样形成了三层保障:探针看得见、监控喊得响、脚本拉得回。真遇到拉不回来的硬故障,至少告警早就到手机上了。
五、小结
监控不是折腾,是对自己服务器的一种责任感。从探针到 Komari 到 keepalive,十几行配置换来的,是"睡觉时服务挂了也会被叫醒"的踏实。