JIMMY
返回项目列表

Pulse

实时监控告警
GoTypeScriptWebSocket自托管

7×24 心跳 · 告警触达 <30s · 面板零依赖构建

pulse — live
 

背景与动机

自托管最大的焦虑不是部署,是“没人知道它挂了”。Pulse 的任务很小但致命:30 秒一次心跳,任何目标连续两次超时立刻告警——半夜服务挂了,先知道的人必须是我,而不是访客。

Agent 用 Go 写,静态编译单文件 6MB,systemd 挂上就跑;面板用 TypeScript 写,无框架依赖,构建产物 40KB。

架构与取舍

Agent 只负责探测和上报,规则引擎和状态机放在服务端——这样加监控目标不用重新编译 agent,改配置文件即可热加载。

告警通道做成接口而不是函数:webhook、邮件、系统通知各是一个实现,测试时注入一个假的通道就能全流程演练。

难点与解决

最难的不是探测,是“告警不骚扰”:连续失败去重、恢复时合并通知、夜间静默窗口可配置。否则一天误报二十条,告警系统比故障先被关掉。

面板的实时曲线用 WebSocket 推送增量点,前端只做追加渲染,一小时的探测数据也不超过 3KB 流量。

数据与结果

服役以来抓到过两次真实故障:一次代理池过期导致的批量 403,一次 VPS 内核升级后的端口未启动。平均触达时间 27 秒——比我自己刷监控页快得多。