服务器看门狗 · 宕机秒知
能做什么
- 每 5 分钟自动探测每台服务器的 ping、TCP 端口(SSH/业务端口)、HTTP 健康端点
- 连续
fail_threshold次失败才告警(默认 2 次)——网络抖动不误报 - 恢复后自动推送「已恢复 + 本次中断时长」
- 告警发送失败不丢:落盘积压,下轮自动补发;超 24h 的陈年告警自动丢弃防轰炸
- 一个 JSON 管多台机器;仅依赖 Python 标准库,装上就能跑
文件
scripts/server-watchdog.py— 主程序(生产验证,零第三方依赖)scripts/watchdog-targets.example.json— 配置模板,复制为watchdog-targets.json后填自己的主机
部署五步
- 填配置:复制
watchdog-targets.example.json为watchdog-targets.json,改targets(主机名/IP/端口/健康检查 URL)和wecom_webhook(企微群机器人 webhook,形如https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx)。webhook 也可走环境变量WATCHDOG_WEBHOOK,不要把含 webhook key 的配置提交进任何仓库。 - 手动跑一轮验证:
python server-watchdog.py——看日志输出UP/DOWN明细。 - 端到端告警验证:临时把一个不存在的主机加进 targets,连跑 2 轮,确认企微收到告警;再删掉。
- 注册计划任务(每 5 分钟):
schtasks /Create /TN "Server-Watchdog" /SC MINUTE /MO 5 /TR "\"C:\Path\To\pythonw.exe\" \"C:\Path\To\server-watchdog.py\"" /F
- 复核:
schtasks /Query /TN "Server-Watchdog" /V /FO LIST确认下次运行时间;到点后看logs/watchdog.log。
⚠️ Windows 计划任务三大坑(已踩完,照做可避开)
| 坑 | 现象 | 解法(脚本已内置,任务注册也要注意) |
|---|---|---|
| ① PATH 差异 | 计划任务里找不到 node/python 等命令 | 计划任务的 PATH ≠ 交互 shell;脚本内一律用绝对路径。本脚本不依赖外部 CLI 也能跑(webhook 直连) |
| ② GBK 乱码 | cmd shim 输出 GBK,utf-8 读取线程崩、错误被吞成空 | 脚本对子进程输出按字节捕获 + utf-8/gbk 双解码兜底 |
| ③ 桌面闪窗 | pythonw 拉起的 ping 等控制台子进程照样闪窗 | 执行器必须用 pythonw.exe(不是 python.exe);脚本内所有 subprocess 已加 CREATE_NO_WINDOW,缺一不可 |
判定逻辑(为什么要这样判)
down= SSH 与 HTTP 健康端点全部失败;ping 仅作参考(ICMP 可能被禁,禁 ping ≠ 宕机)- HTTP 4xx 也算存活(如 404 中间层说明服务在);5xx/超时才算失败
- 状态翻转才发告警,不会每 5 分钟轰炸
告警通道优先级
- 企微群机器人 webhook(推荐,配置即用)
- 兜底 wecom-cli aibot send(需本机已授权 wecom-cli;授权人 ID 运行时解析,不硬编码)
无 webhook 也能用
wecom_webhook 留空时自动走 wecom-cli 兜底;两个通道都失败时告警落盘 logs/alerts-pending.log,恢复后自动补发。