静默故障检测器
捕获基于错误的监控无法看到的故障:一个进程只是 静默了。没有异常,没有崩溃——它只是停止了发送信号,而你几天后才发现。
何时使用
- 你有一个发射时间戳流(日志记录器、心跳、定时任务、智能体循环、数据源)和一个预期的节奏,你想知道它是否已停止。
- 你想要一个可验证、确定性的检查,可以将其接入日常完整性扫描。
工作原理(一个旋钮)
当最近信号的时间戳早于 expected_interval_sec * multiplier(默认 multiplier = 3.0 ≈ 约三次漏拍)时,状态为静默。空流为静默。multiplier 在 检测延迟(值越小,捕捉真实死亡越快)和 突发节奏上的误报(值越大,容忍度越高)之间进行权衡。将 expected_interval_sec 设置为流的典型间隔;如果节奏是突发性的,则将其设置为接近 p95 的间隔并在文档中说明。
运行它
echo '{"now": 1750000000, "expected_interval_sec": 60,
"timestamps": [1749999940, 1749999990]}' > input.json
python3 detector.py input.json # 退出码 0 = 健康,退出码 1 = 静默(可告警)
或者导入它:from detector import detect; detect(now, timestamps, expected_interval_sec, multiplier=3.0)。
输出
{ "status": "silent", "reason": "last signal 19880s old vs threshold 180s",
"last_age_sec": 19880, "threshold_sec": 180.0 }
已知限制(经过测量,而非声称——参见 BENCHMARK.md)
在一个包含105个案例的标注测试集上,其得分为 83.8% 准确率(TPR 81.8% / TNR 86.0%)。所有错误都位于阈值附近的 2-4 倍“灰色区域”;明确的情况则 100% 正确。 两种诚实的失效模式:(1)对仍存活但当前迟缓的流由于偶然跨越了 3 倍阈值而产生误报;(2)对一个刚刚死亡的流产生一个窗口的检测延迟。根据您的延迟/误报偏好调整 multiplier。评估是可复现的——重新运行并自行检查数字。