沉默失敗檢測器 是做什麼的?
捕捉監控錯誤無法發現的失敗:一個流程只是沉默不語。沒有異常,沒有崩潰——它只是停止發送信號,而你數天後才發現。
使用時機
- 你有一串發送時間戳(記錄器、心跳、定時任務、代理循環、數據饋送)和預期的發送頻率,並希望知道它是否已停止。
- 你想要一個可驗證、確定性的檢查,可以將其整合到每日完整性掃描中。
運作原理(一個旋鈕)
當最新的信號時間比 expected_interval_sec * multiplier 更舊時,則判定為沉默(預設 multiplier = 3.0 → 大約錯過三次心跳)。空的串流也被視為沉默。這個乘數在檢測延遲(較低的值能更快捕捉到真正的停止)和誤報(對爆發性節奏的容忍度,較高的值更容忍)之間進行權衡。將 expected_interval_sec 設定為串流的典型間隔;如果節奏是爆發性的,則將其設定為接近 p95 的間隔,並在說明中註明。
執行方式
echo '{"now": 1750000000, "expected_interval_sec": 60,
"timestamps": [1749999940, 1749999990]}' > input.json
python3 detector.py input.json # exit 0 = 健康, exit 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 以滿足你對延遲/誤報的偏好。評估是可重現的——重新執行並自行檢查數值。