以 SLO 燃燒率告警(Alerting on SLOs)

★★★★★Draft

FromSRE WorkbookSRE

📚 From the Books

以 SLO 燃燒率告警(Alerting on SLOs)Observability

告警不該對「有錯誤」響,而該對「正在以會燒光 error budget 的速度出錯」響。把 SLO 換算成燃燒率(burn rate),再用多窗口把「夠嚴重」與「還在持續」兩件事分開判斷——這是防守應用層 SLO 最穩的告警方式。

🧠 Intuition

TIP

好告警要同時顧四件事:精確度(響的都是真事件)、召回率(真事件都會響)、偵測時間(多快響)、重置時間(修好後多快停)。四者互相拉扯,燃燒率告警就是在它們之間找平衡。

⚖️ Tradeoffs

固定窗口的錯誤率閾值 — 最直覺,但顧此失彼
  • 窗口太短(如 10 分鐘 error rate ≥ 0.1% 就響):偵測快,但精確度極低——0.1% 撐 10 分鐘只燒掉 0.02% 月度 budget 卻天天狂響,全部不理仍能達標。
  • 窗口太長(如 36 小時):精確度上來了,但重置時間極差——100% 中斷修好後告警還會掛 36 小時,且長窗口的率值計算很吃記憶體/IO。
  • for(持續時間)也救不了:波動性 SLI 只要一瞬間回到閾值內就重置計時器,可能永遠不觸發——每 10 分鐘爆一次的尖峰燒掉 35% budget,告警卻從頭到尾沒響過。
多窗口、多燃燒率告警 — Workbook 推薦的做法
  • 一條規則配一組(長窗口 + 燃燒率 + 通知類型),依嚴重度分級。99.9% SLO 的常見起手式:1 小時 / burn 14.4(燒 2%)→ page;6 小時 / burn 6(燒 5%)→ page;3 天 / burn 1(燒 10%)→ ticket。
  • 每級再加一個短窗口(長窗口的 ~1/12)當確認閘門:長窗口判斷「夠嚴重」,短窗口判斷「現在還在燒」。錯誤一停,短窗口很快掉回閾值下、告警隨即停止,不必空等長窗口的 60 分鐘。
  • 換來精確度、召回率、重置時間三者兼顧;代價是參數變多、規則較難維護,多條同時成立時要做告警抑制避免重複通知。
  • 低流量服務是例外:每小時才 10 個請求時,單一失敗就是 10% 錯誤率、瞬間 1000x burn rate。得靠合成流量、聚合同故障域的小服務、或與利害關係人協商調低 SLO 來處理。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading

🔗 Dive Deeper