サイレント障害検出器 は何をしますか?
エラーモニタリングでは見えない障害を捉えます。プロセスが沈黙した状態を検出します。例外もクラッシュもなく、単に発信を停止し、数日後に気づくようなケースです。
使用するタイミング
- 定期的なタイムスタンプストリーム(ロガー、ハートビート、cronジョブ、エージェントループ、データフィードなど)があり、期待される周期が分かっている場合、その停止を検知したいとき。
- 検証可能で決定的なチェックを日次健全性スイープに組み込みたいとき。
動作方法(1つの調整パラメータ)
最新のシグナルが expected_interval_sec * multiplier(デフォルト multiplier = 3.0 → 約3回の欠落)よりも古い場合にSILENTと判定します。空のストリームはSILENTです。multiplierは検出レイテンシ(低いほど実際の停止を早く捉える)と、バースト的な周期における誤報(高いほど寛容)のトレードオフです。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%正解です。 2つの正直な障害モードがあります。(1) 生存しているがたまたま3倍を超えて遅延したストリームによる誤報。(2) ちょうど停止したストリームに対する1ウィンドウの検出レイテンシ。multiplierを調整して、レイテンシと誤報率の好みに合わせてください。評価は再現可能です — 自分で再実行して数値を確認できます。