🎯 什麼情境該想到我

當你「等到故障發生後才被告警轟炸,而不是在故障前就被提醒」的時候。

⚙️ 怎麼用(步驟 / 公式)

意圖:讓監控系統裡只剩下能預防故障的告警,而不是一堆在事故發生後才響的噪音。

理想做法(Tom Limoncelli,《The Practice of Cloud System Administration》共同作者、前 Google SRE):

  1. 把監控系統裡現有的告警全部刪掉
  2. 每一次使用者可見的故障(user-visible outage)之後,問:「哪些指標本來可以預測這次故障?」
  3. 只把那些指標加進監控系統,需要時才設告警。
  4. 重複。結果是你只會剩下能預防故障的告警,而不是在事故已經發生後被告警轟炸。

實務替代做法(書中說這是最容易複製上述成果的方式之一):

  • 分析最近一段期間(例如 30 天)最嚴重的事故
  • 為每一件事故列出一份遙測清單:當時若有這些遙測,就能更早更快地偵測與診斷問題,也能更容易更快地確認修復真的有效

書中的具體範例——NGINX web server 停止回應請求,回頭找的前導指標(leading indicators)分四層:

  • Application level:網頁載入時間上升
  • OS level:伺服器可用記憶體變低、磁碟空間變低
  • Database level:資料庫交易時間比平常久
  • Network level負載平衡器後方正常運作的伺服器數量下降

接著:

  • 這每一項都是生產事故的潛在前兆(precursor);對每一項設定告警,在它們充分偏離均值時通知,好讓人及時採取矯正措施。
  • 對越來越微弱的失效訊號(ever-weaker failure signals)重複這個流程——問題會在生命週期中被越來越早發現,影響客戶的事故與 near miss 也就越來越少。換句話說,這同時在預防問題加快偵測與修正

原文:「ideal world, we would delete all the alerts we currently have in our monitoring」(L8254,接 L8255「system. Then, after each user-visible outage, we’d ask what indicators would」)

原文:「easiest ways to do this is to analyze our most severe incidents in the recent past」(L8261,接 L8262「(e.g., 30 days) and create a list of telemetry that could have enabled earlier and」)

原文:「By repeating this process on ever-weaker failure signals, we find problems ever」(L8284)

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 「刪光所有告警」是 Limoncelli 自己說的玩笑式理想(I joke that in an ideal world),實務上請從「最近 30 天最嚴重事故」這條替代路徑起手。
  • 這個流程吃事故品質:如果事後檢討做得草率、沒有誠實的時序重建,就回推不出前導指標——先把 工具-無指責事後檢討 做對。
  • 加進來的指標仍要決定門檻怎麼設:資料常態就用 均值與標準差告警,不常態就用 非高斯資料的異常偵測
  • 每加一個告警都在增加噪音預算,「偏離均值就通知」不等於「值得半夜叫醒人」;分級判準見 日誌分級

🔗 相關工具