可觀測性與 SLO ch06 SLI、SLO 與錯誤預算:把「還算穩定」變成可以拿來吵架的數字
下一章→
CH 06 SRE 的分水嶺

SLI、SLO 與錯誤預算:把「還算穩定」變成可以拿來吵架的數字

SLI 怎麼選為什麼 100% 是錯的目標錯誤預算是決策工具不是儀表板依賴鏈的乘積burn rate 多視窗告警SLO 與 SLA 的差別

前面五章教你怎麼看見系統。這一章要處理一個它們全部都回答不了的問題:

「p99 是 300 毫秒」——這樣算好還是不好?

沒有基準的時候,這個問題只有兩種答案:工程師覺得「還可以」,或產品覺得「太慢了」。而兩邊都沒有證據,於是它變成一場意見之爭。ch03 那場「SLO 月月達標但客訴不斷」的事故,根源之一就是沒有人能反駁那張綠色的儀表板。

SLO 要做的就是把這件事變成一個雙方都同意的數字,而它真正的產出不是儀表板,是決策:

「這一季的錯誤預算已經燒掉 90%,所以新功能暫停,這兩週全部投入穩定性。」

**能不能講出這句話,就是 SRE 與一般維運的分水嶺。**而且它需要的不只是技術—— 它需要一份事先寫好、管理層簽過名的政策。

這一章要拆的是:

  • SLI 怎麼選:為什麼「好事件 / 有效事件」這個形式比分位數更好用。
  • SLO 訂多少:為什麼 100% 是錯的目標,以及每多一個 9 的真實成本。
  • 依賴鏈:你的 SLO 不可能高於你依賴的東西的乘積——這條算式常常讓人清醒。
  • 錯誤預算:它是預算不是配額,重點在「用完了會發生什麼」。
  • burn rate 告警:怎麼在「燒得太快」時就通知,而不是等預算用完(這一章與 ch07 的接點)。
  • 一個真實場景:訂了 99.99%,儀表板一直紅,但沒有任何事情因此改變。

這一章的 SLI 全部建立在 ch01 那條原則上:症狀優先於原因。SLI 必須從使用者的位置量,不能從機器指標推導。

SLI(Service Level Indicator)就是「衡量服務好壞的那個數字」。而它有一個特別好用的標準形式:

SLI = 好事件的數量 / 有效事件的數量 × 100%

看起來平淡,但這個形式解決了三個實務問題。

問題①:它避開了分位數的所有陷阱

與其問「p99 是多少」,不如問「有多少比例的請求在 300 毫秒內完成」。
ch03 說過:分位數不能平均、不能相加、桶內是插值猜的、低流量時沒有統計意義。而「比例」完全沒有這些問題——它可以跨實例相加、可以跨時間聚合,而且如果 0.3 正好是一個 bucket 邊界(ch03 的建議),它還是精確值而不是插值。
sum(rate(http_request_duration_seconds_bucket{le="0.3"}[30d]))
  /
sum(rate(http_request_duration_seconds_count[30d]))

問題②:「有效事件」讓你能排除不該算的東西

分母不是「所有請求」,是「應該被算進來的請求」:

  • 健康檢查、爬蟲、內部監控的流量——排除。
  • 使用者輸入錯誤造成的 4xx——通常排除(那不是服務壞了,ch04 講過同樣的道理)。
  • 但 429(被限流)與 401 大量出現時要納入——那是服務端的問題。
「有效事件」的定義是最容易被拿來作弊的地方。把所有不利的情況都排除掉,SLI 永遠 100%——而它也永遠不會反映真實。判準只有一個:使用者會不會因此感到不滿?會,就要算進去。

問題③:它能直接算出錯誤預算

因為 SLI 是一個比例,1 - SLO 就直接是「允許失敗的比例」——這是後面整章的基礎。

五類常見的 SLI

類型問的問題典型定義
可用性能不能用成功回應數 / 有效請求數
延遲夠不多快在 X 毫秒內完成的請求比例
品質回的東西完整嗎非降級回應的比例(推薦系統退回熱門清單也算失敗)
新鮮度資料多舊資料延遲小於 X 秒的查詢比例(讀寫分離、快取、報表)
正確性算得對嗎對帳一致的紀錄比例(最難量但常常最重要)

大部分服務用「可用性 + 延遲」兩個就夠了。而如果你的系統有快取或複本,新鮮度往往是使用者實際抱怨的那一個(ch07 會回到這件事)——「我剛改的資料不見了」就是新鮮度問題。

SLI 最常見的錯誤不是算錯,是選錯量測對象。

錯誤的方向:從「我有什麼指標」開始

❌ CPU 使用率 < 80% 的時間比例
❌ 5xx 錯誤率 < 0.1%
❌ 所有 pod 都健康的時間比例

這些全部是白箱指標,而 ch01 已經證明過它們的盲點:請求根本沒進來的時候,這些數字全都很漂亮(TLS 憑證那個案例)。

正確的方向:從使用者做的事情開始

1
列出關鍵旅程:登入、搜尋商品、下單、付款、查看訂單。
2
對每條旅程定義「成功」:不只是「沒有回 500」,而是「使用者拿到他要的東西,而且在可接受的時間內」。
3
決定在哪裡量:越靠近使用者越好。負載平衡器 > API gateway > 應用程式內部。最理想是客戶端回報(RUM),因為它包含了 DNS、TLS、網路——也就是 ch01 那場事故發生的地方。

不是所有端點都需要 SLO

常見的錯誤是「幫每個 API 都訂一個 SLO」,結果是 80 個 SLO,沒有人看得完,也沒有人真的在乎。
正確做法是挑出 3~5 條真正重要的使用者旅程。判準:它壞了,公司會不會因此損失錢或信任?不會的話,它就不需要 SLO(有監控就好)。

不同旅程可以有不同的門檻

付款  → 99.95% 成功,99% 在 2 秒內      (壞了直接損失營收)
搜尋  → 99.9%  成功,95% 在 500ms 內   (慢一點使用者會忍)
報表  → 99%    成功,90% 在 10 秒內     (內部使用,可以重試)

把所有東西都訂成一樣高,等於沒有優先級。而 SLO 的價值有一半來自它強迫你講清楚「什麼比較重要」。

一個實用的檢驗

SLI 定好之後,回頭問一句:「上次那場事故,這個 SLI 有掉下來嗎?」

如果沒有,那它就選錯了——SLI 的唯一價值,是在使用者受影響時它要跟著動。拿過去半年的事故清單來對照,是驗證 SLI 最快的方法。

訂 SLO 時最直覺的想法是「越高越好」,而這個直覺會導致最糟的結果。

先看數字

SLO每月允許的失敗時間每月允許的失敗請求(100 萬 req/日)
99%約 7.3 小時30 萬
99.9%約 43 分鐘3 萬
99.95%約 22 分鐘1.5 萬
99.99%約 4.3 分鐘3 千
99.999%約 26 秒300
99.99% 代表:整個月只有 4.3 分鐘的預算。一次滾動更新沒做好、一次資料庫 failover、一次憑證更新——任何一個都會吃掉大半。而 99.999% 意味著人類來不及反應,所有恢復都必須是自動的。

為什麼 100% 是錯的

  • 它在物理上不可能:你依賴的雲端、網路、DNS 都不是 100%。
  • 它會扼殺所有變更:任何部署都有風險,目標是 100% 就意味著最安全的策略是永遠不要改任何東西。
  • 更重要的是:使用者感覺不出來。使用者的網路本身就有 1~2% 的失敗率。把可用性從 99.9% 提升到 99.99%,使用者體驗上的差異可能是零,而成本是好幾倍。

那該訂多少?從「使用者何時開始不滿」推

1
看歷史:過去半年實際達成多少?如果一直是 99.7%,卻沒有人抱怨——那 99.9% 可能就夠了。
2
看客訴與商業影響:哪一次的故障真的造成了投訴或營收損失?那次的 SLI 掉到多少?那個數字附近就是門檻。
3
訂一個「稍微難達成」的值:如果目前是 99.95%,訂 99.9% 等於沒有約束力(永遠達標,錯誤預算永遠花不完,沒有任何決策會被觸發)。
好的 SLO 應該偶爾會被違反。從來沒有違反過的 SLO,代表它訂得太鬆——它不會驅動任何決策,只是一張永遠綠色的圖。而那正是 ch03 那場事故裡最危險的東西。

依賴鏈:一個讓人清醒的算式

你的服務 依賴 資料庫(99.95%) + 快取(99.9%) + 支付閘道(99.9%)

理論上限 = 0.9995 × 0.999 × 0.999 ≈ 99.75%

所以在這個架構下訂 99.99% 是不可能達成的,除非你為每個依賴做降級或容錯(快取失效時能降級、支付失敗能重試——見 高可用防禦)。SLO 不只是一個目標,它同時是對架構的要求。

這是整章、也是整軌最重要的一節。錯誤預算把「可靠性」從一個模糊的價值觀,變成一個可以被分配、被花用、被爭論的資源。

錯誤預算 = 1 - SLO

SLO 99.9%,一個月 3,000 萬次請求
→ 預算 = 0.1% × 3,000 萬 = 30,000 次失敗

關鍵觀念:它是預算,所以它是拿來「花」的

錯誤預算沒用完,不是好事,是浪費。
它代表你可以更快地發版、可以做更激進的實驗、可以承擔更多風險——而你沒有。可靠性超過需求的部分,是用「創新速度」換來的,而使用者感覺不到那個差別。

這個觀念的轉換是 SRE 的核心:可靠性不是越高越好,它是一個要被「剛好花完」的資源。

而真正的重點是:用完了會發生什麼

一份沒有後果的 SLO 是裝飾品。所以必須事先寫下 error budget policy——而且要有人簽字:

預算剩餘 > 50%    → 正常發版,可以做風險較高的實驗
預算剩餘 20~50%   → 正常發版,但高風險變更需要額外審查
預算剩餘 < 20%    → 只發修 bug 與穩定性相關的變更
預算用完           → 凍結功能發版,全隊投入可靠性工作,直到預算回補

連續兩個週期用完  → 重新檢視 SLO 是否訂得不合理,或架構是否需要投資
這份政策必須在事情發生之前寫好、並取得產品與管理層的同意。
因為預算真的用完的那一刻,一定是最不想凍結發版的時候(趕活動、趕上線)。如果那時候才開始討論「要不要凍結」,答案永遠是「這次特殊,下不為例」——然後 SLO 就死了。

這也是為什麼 SLO 是組織問題而不只是技術問題:它的本質是事先約定好一個機制,讓未來的自己無法討價還價。

怎麼算剩多少

-- 30 天滾動視窗的預算消耗率
1 - (
  sum(rate(http_requests_total{status!~"5.."}[30d]))
  /
  sum(rate(http_requests_total[30d]))
) / (1 - 0.999)
-- 結果 0.85 → 已經燒掉 85% 的預算

滾動視窗 vs 日曆月

  • 日曆月:好理解、與商業週期一致,但月初會「重置」——月底出大事的團隊只要撐過幾天就沒事了,這是一個壞誘因。
  • 30 天滾動:更能反映「最近的健康狀況」,事故的影響會持續 30 天才淡出。實務上建議用這個。

錯誤預算的儀表板有一個問題:等你看到「預算用完了」,事情已經發生完了。burn rate 告警要解決的就是這個。

什麼是 burn rate

burn rate = 目前的錯誤率 / 允許的錯誤率

SLO 99.9%(允許 0.1% 失敗)
目前錯誤率 1%  →  burn rate = 10
→ 代表以這個速度,30 天的預算 3 天就會燒完
burn rate = 1 代表「剛好在期末用完預算」,這是可接受的。要告警的是燒得太快的情況。

為什麼需要「多視窗、多燃燒率」

單一門檻永遠是錯的:門檻設高只抓得到災難、設低會被小抖動吵醒。解法是同時看快與慢兩種燒法,而且每一種都配一個長視窗與一個短視窗。

燃燒率長視窗短視窗多久燒完預算動作
14.4×1 小時5 分鐘約 2 天立刻叫人(page)
6×6 小時30 分鐘約 5 天叫人(page)
3×1 天2 小時約 10 天開工單(ticket)
1×3 天6 小時剛好期末用完開工單

短視窗是做什麼的

短視窗的作用是「確認問題還在持續」——它負責讓告警停止。
只有長視窗的話,一次 5 分鐘的尖峰會讓 1 小時視窗的 burn rate 維持很高長達一小時,告警在問題已經恢復後還響了 55 分鐘。加上「短視窗也必須超標」這個條件,問題一恢復告警就自動解除。
-- 快速燃燒告警:長短視窗都要超標
(
  slo:error_ratio:rate1h > 14.4 * 0.001
  and
  slo:error_ratio:rate5m > 14.4 * 0.001
)

這樣做的好處

  • 告警的數量與嚴重性掛鉤:小問題開工單、大問題才叫醒人。
  • 告警的意義是統一的:不管是延遲變慢還是錯誤變多,訊息都是「你正在以 X 倍速度消耗使用者的耐心」——而不是「某台機器的 CPU 到 85% 了」。
  • 它天然是徵狀告警(ch07 的主題):它量的是使用者受到的影響,不是機器的狀態。

徵狀

某團隊在一年前導入 SLO,做得很認真:儀表板漂亮、burn rate 告警都設好了。一年後回頭看:

  • SLO 儀表板有超過一半的時間是紅的。
  • 錯誤預算每個月第一週就用完。
  • 但發版節奏完全沒有變過——每週照發,沒有任何一次因為預算而暫停。
  • 大家已經不看那張圖了。有人半開玩笑說:「反正它永遠是紅的。」

診斷

拆開來看,三件事同時錯了。

1
SLO 的數字是拍腦袋訂的。當初的理由是「四個 9 聽起來比較專業」。但盤點依賴之後:
資料庫 99.95% × 支付閘道 99.9% × 簡訊供應商 99.5%
≈ 99.35%   ← 理論上限就已經低於目標
這個 SLO 在架構上就不可能達成,而且沒有人算過這件事。
2
沒有 error budget policy。「預算用完要做什麼」從來沒有寫下來,也從來沒有跟產品討論過。於是預算用完的唯一後果,是儀表板變紅。
3
SLI 把不該算的算進來了。分母是「所有 HTTP 請求」,包含了健康檢查、爬蟲、以及大量使用者輸入錯誤造成的 400。那些「失敗」跟服務健康無關,但它們吃掉了預算。
而三者疊加的結果,比「沒有 SLO」更糟:團隊付出了建置與維護的成本,得到一個大家都學會忽略的紅色儀表板。更危險的是——當真正的重大故障來臨時,那張圖看起來跟平常沒有兩樣。

修法

1
先修 SLI:分母排除健康檢查與爬蟲、排除使用者輸入造成的 4xx;改用「好事件/有效事件」的形式,延遲改成「2 秒內完成的比例」而不是 p99。
2
重訂 SLO:拿過去 6 個月的實際數據與客訴紀錄對照——實際達成 99.4%,而客訴集中在跌到 98% 以下的那三次。於是訂 99.5%:比現況稍難,但架構上可達成,而且與使用者不滿的門檻對得上。
3
寫下 error budget policy 並取得簽字:預算剩 20% 以下只發修復類變更、用完則凍結功能發版。這一步是整個修復的核心——沒有它,前兩步只是把紅圖變成綠圖。
4
把依賴的 SLO 攤開:既然簡訊供應商是最大的短板,就決定「簡訊失敗要降級成 email,不計入 SLI」,或者接受它並把 SLO 訂低一點——兩者都可以,但必須是明確的決定。

教訓

SLO 的產出不是儀表板,是決策。判斷一套 SLO 是否有效,只要問一個問題:「過去半年,有沒有任何一次行動,是因為它而發生的?」
如果答案是沒有,那它就只是一張圖——而且是一張會讓人對紅色麻木的圖。
1
挑 3~5 條關鍵使用者旅程(不是端點)。判準:壞了會不會損失錢或信任。
2
對每條旅程定義 SLI,用「好事件 / 有效事件」的形式,明確寫下分子與分母包含什麼、排除什麼。
3
確認量測位置盡量靠近使用者(LB 或 gateway 優於應用內部)。延遲的 bucket 邊界要包含門檻值(ch03)。
4
先觀察 4 週再訂 SLO——用真實資料訂,不要用直覺。同時算一次依賴鏈的理論上限。
5
訂一個「稍微難達成」的目標,並拿過去的事故與客訴驗證:那幾次事故,這個 SLI 有掉下來嗎?
6
寫 error budget policy 並取得產品與管理層簽字。這一步不能省,否則前五步都是裝飾。
7
設定 burn rate 告警(多視窗多燃燒率),並把 SLI 的計算固化成 recording rule(ch03)。

SLO 與 SLA 的差別(不要搞混)

SLOSLA
對誰對內部,工程與產品之間的約定對客戶,寫在合約裡
違反的後果觸發 error budget policy(凍結發版等)賠錢、退款、法律責任
數字關係要比 SLA 嚴格比 SLO 寬鬆——留緩衝給自己

SLO 必須比 SLA 嚴格,這樣你會在賠錢之前就先被自己的機制攔下來。兩者訂成一樣是常見的錯誤——那等於沒有任何預警空間。

什麼時候不需要 SLO

  • 內部工具、實驗性專案:維護 SLO 本身有成本,而它們壞了沒有人在乎。
  • 還沒有基本監控的時候:SLO 建立在可靠的 SLI 資料上。順序是先有量測,再有目標。
  • 沒有人願意為它做決策的時候:這是最重要的一條——如果組織不打算因為預算用完而改變任何行為,那就不要做 SLO,做好監控與告警就好。假的 SLO 比沒有 SLO 更糟。

四筆帳

  • 建置與維護成本:SLI 的定義要隨著產品演進調整。過時的 SLO 比沒有更危險——它會用舊的標準給你虛假的安全感。
  • 資料品質的依賴:SLI 建立在 metrics 之上,而 ch02/ch03 的每一個陷阱(cardinality、查詢寫錯、bucket 沒對齊)都會直接汙染 SLO。ch03 那場事故就是 SLO 被錯誤查詢餵養的例子。
  • 組織成本:error budget policy 需要跨部門的同意與持續執行。這通常比技術部分難得多。
  • 過度工程的風險:80 個 SLO 等於沒有 SLO。挑 3~5 個。

三個盲點

  • SLO 是統計的,個案會被稀釋。99.9% 達標的同時,可能有一個大客戶 100% 失敗——因為他只佔總流量的 0.05%。對重要客戶要另外分開量(依 tenant 拆 SLI),這在 B2B 系統尤其重要。
  • 它不涵蓋「還沒發生的風險」:憑證下個月到期、磁碟三週後會滿、某個依賴的版本已經停止支援——SLO 全部是綠的,而災難正在逼近。這類問題要靠飽和度指標與定期檢視(ch01 的四個黃金訊號裡,飽和度是唯一有預測性的那一個)。
  • 它不會告訴你為什麼:SLO 只說「使用者受影響了」,根因還是要回到前五章的工具。這正是它作為「徵狀」的本質——而那是優點不是缺點。

把這一章收成三句

① SLI 用「好事件 / 有效事件」的形式,從使用者旅程推導,不要從機器指標推導——並且拿過去的事故驗證它會不會掉下來。
② 100% 是錯的目標:好的 SLO 應該偶爾被違反,而且不可能高於依賴鏈的乘積。
③ 錯誤預算是決策工具不是儀表板——判斷 SLO 有沒有效,只要問「過去半年有沒有任何一次行動是因為它而發生的」。

下一章處理最後一塊:有了 SLO 與 burn rate,什麼時候該把人叫醒?而更重要的是——什麼時候不該。

五類 SLI:問什麼、怎麼定義
類型問題定義形式什麼時候特別重要
可用性能不能用成功回應數 / 有效請求數所有服務的基本盤
延遲夠不夠快在 X 毫秒內完成的比例(不是 p99)面向使用者的互動
品質回的東西完整嗎非降級回應的比例有降級機制的系統(推薦、搜尋)
新鮮度資料多舊延遲小於 X 秒的查詢比例讀寫分離、快取——「我剛改的資料不見了」
正確性算得對嗎對帳一致的紀錄比例金流、計費——最難量但常常最重要
SLO 數字與它的真實成本
SLO每月可失敗時間意味著什麼
99%約 7.3 小時內部工具、非關鍵服務
99.9%約 43 分鐘多數線上服務的合理起點
99.95%約 22 分鐘關鍵交易路徑;需要良好的部署與回滾機制
99.99%約 4.3 分鐘一次失敗的 failover 就吃掉大半;需要多區容錯
99.999%約 26 秒人類來不及反應,所有恢復必須自動化
100%0物理上不可能,且會扼殺所有變更
多視窗多燃燒率告警
燃燒率長視窗 / 短視窗多久燒完預算動作
14.4×1 小時 / 5 分鐘約 2 天立刻叫人(page)
6×6 小時 / 30 分鐘約 5 天叫人(page)
3×1 天 / 2 小時約 10 天開工單(ticket)
1×3 天 / 6 小時剛好期末用完開工單
短視窗的作用確認問題仍在持續—讓告警在恢復後自動解除,而不是多響 55 分鐘

練習題 點選選項查看解析

0 / 10
01 / 10
為什麼 SLI 建議用「在 300 毫秒內完成的請求比例」而不是「p99 延遲」?
A 因為比例比較容易解釋給主管聽
B 因為比例可以跨實例相加、跨時間聚合,而且如果門檻值正好是 bucket 邊界,它是精確值而非插值——分位數則不能平均、不能相加、桶內是猜的
C 因為 p99 的計算成本較高
D 因為 Prometheus 不支援 p99
解析
這直接解決了 ch03 那整章的陷阱。而且「好事件/有效事件」的形式還能直接算出錯誤預算(1 - SLO 就是允許失敗的比例)。
02 / 10
SLI 的「有效事件」(分母)為什麼是最容易作弊的地方?
A 因為它的計算最複雜
B 因為把所有不利情況都排除掉,SLI 就永遠 100%——而它也永遠不會反映真實。判準只有一個:使用者會不會因此不滿
C 因為分母通常比分子大
D 因為它需要跨服務統計
解析
健康檢查與爬蟲該排除;使用者輸入錯誤造成的 4xx 通常排除;但大量 429(限流)要納入,因為那是服務端的問題。本章的失敗場景之一就是把所有 HTTP 請求都算進分母,讓與服務健康無關的失敗吃掉預算。
03 / 10
SLI 定好之後,最快的驗證方法是什麼?
A 跑一次壓力測試
B 拿過去半年的事故清單對照——問「那幾次事故,這個 SLI 有掉下來嗎」;沒有的話就是選錯了
C 請產品經理確認
D 與同業的數字比較
解析
SLI 的唯一價值是「在使用者受影響時它要跟著動」。從機器指標推導的 SLI(CPU、5xx 率)在 ch01 那種 TLS 故障中完全不會動,因為請求根本沒進到應用程式。
04 / 10
為什麼「好的 SLO 應該偶爾會被違反」?
A 為了讓團隊保持警覺
B 因為從來沒被違反過的 SLO 訂得太鬆,它不會驅動任何決策,只是一張永遠綠色的圖
C 因為 100% 達標不符合統計規律
D 為了向管理層爭取資源
解析
如果目前實際是 99.95%,訂 99.9% 等於沒有約束力——錯誤預算永遠花不完,沒有任何決策會被觸發。而 ch03 那場事故裡最危險的東西,正是一張永遠綠色的圖。
05 / 10
服務依賴資料庫(99.95%)、快取(99.9%)、支付閘道(99.9%),SLO 最高可能訂到多少?
A 99.95%,取最高的那個
B 約 99.75%,是三者的乘積——除非為每個依賴做降級或容錯,否則訂更高在架構上不可能達成
C 99.9%,取平均值
D 與依賴無關,可以任意訂
解析
0.9995 × 0.999 × 0.999 ≈ 99.75%。這個算式常常讓人清醒——SLO 不只是一個目標,它同時是對架構的要求。要提高就必須讓依賴可降級(快取失效能降級、支付能重試)。
06 / 10
「錯誤預算沒用完」代表什麼?
A 團隊表現優異,應該獎勵
B 是一種浪費——它代表你本來可以更快發版、做更激進的實驗,而超出需求的可靠性使用者感覺不到
C SLI 計算有誤
D 應該立刻提高 SLO
解析
這個觀念轉換是 SRE 的核心:可靠性不是越高越好,它是一個要被「剛好花完」的資源。超出需求的部分,是用創新速度換來的,而使用者感覺不到那個差別。
07 / 10
error budget policy 為什麼必須「事先」寫好並取得簽字?
A 為了符合稽核要求
B 因為預算真的用完的那一刻,一定是最不想凍結發版的時候(趕活動、趕上線)——那時才討論,答案永遠是「這次特殊,下不為例」,然後 SLO 就死了
C 為了讓工程師有法律保障
D 因為之後就沒有時間寫了
解析
SLO 的本質是「事先約定好一個機制,讓未來的自己無法討價還價」。這也是為什麼 SLO 是組織問題而不只是技術問題——技術部分反而是最簡單的。
08 / 10
burn rate = 10 代表什麼?
A 已經燒掉 10% 的預算
B 目前的錯誤率是允許值的 10 倍——以這個速度,30 天的預算 3 天就會燒完
C 還剩 10 天的預算
D 錯誤率是 10%
解析
burn rate = 目前錯誤率 / 允許錯誤率。burn rate = 1 表示剛好在期末用完,是可接受的;要告警的是燒得太快的情況。而 14.4× 這個數字的來源就是「1 小時內燒掉 2% 的月預算」。
09 / 10
多視窗告警中,「短視窗」的作用是什麼?
A 提高偵測的靈敏度
B 確認問題仍在持續——它負責讓告警「停止」。只有長視窗的話,一次 5 分鐘的尖峰會讓告警在恢復後還多響 55 分鐘
C 降低誤報率
D 區分不同的服務
解析
所以條件寫成「長視窗超標 AND 短視窗也超標」。這是多視窗多燃燒率設計裡最容易被忽略、但實務效果最大的一半——它直接決定了 on-call 會不會被已經恢復的問題持續騷擾。
10 / 10
判斷一套 SLO 是否有效,最直接的問題是什麼?
A 儀表板是不是綠的
B 「過去半年,有沒有任何一次行動是因為它而發生的?」——沒有的話它就只是一張圖
C SLI 的計算是否精確
D 是否涵蓋了所有 API
解析
SLO 的產出不是儀表板,是決策。本章失敗場景裡三個錯誤疊加(拍腦袋訂的數字、沒有 policy、SLI 分母算錯)的結果,比沒有 SLO 更糟——團隊付了成本,得到一張大家都學會忽略的紅圖,而真正的重大故障來臨時它看起來跟平常一樣。

點擊卡片翻面查看答案,共 13 張。

QUESTION
SLI 的標準形式是什麼?它解決了哪三個問題?
點擊翻面
ANSWER
好事件 / 有效事件。①避開分位數所有陷阱(可相加、可聚合、門檻若是 bucket 邊界則為精確值)②「有效事件」讓你排除健康檢查、爬蟲等不該算的 ③它是比例,所以 1-SLO 直接就是錯誤預算。
點擊翻回
QUESTION
延遲的 SLI 該怎麼寫?為什麼不用 p99?
點擊翻面
ANSWER
寫成「在 X 毫秒內完成的請求比例」。因為分位數不能平均、不能相加、桶內是插值猜的、低流量沒有統計意義(ch03);而比例沒有這些問題,且門檻若正好是 bucket 邊界就是精確值。
點擊翻回
QUESTION
SLI 的分母(有效事件)該排除什麼、納入什麼?
點擊翻面
ANSWER
排除健康檢查、爬蟲、內部監控流量、使用者輸入錯誤的 4xx;納入大量出現的 429(限流)與服務端造成的失敗。判準只有一個:使用者會不會因此不滿。
點擊翻回
QUESTION
怎麼驗證 SLI 選對了?
點擊翻面
ANSWER
拿過去半年的事故清單對照:那幾次事故,這個 SLI 有掉下來嗎?沒有就是選錯。SLI 的唯一價值是在使用者受影響時它要跟著動。
點擊翻回
QUESTION
為什麼 100% 不能當 SLO?
點擊翻面
ANSWER
①物理上不可能(依賴的雲端、網路、DNS 都不是 100%)②會扼殺所有變更(最安全的策略變成永遠不改)③使用者感覺不出來——使用者自己的網路就有 1~2% 失敗率。
點擊翻回
QUESTION
依賴鏈怎麼限制你的 SLO 上限?
點擊翻面
ANSWER
理論上限是所有依賴可用度的乘積。DB 99.95% × 快取 99.9% × 支付 99.9% ≈ 99.75%——訂更高在架構上不可能達成,除非為每個依賴做降級或容錯。SLO 同時是對架構的要求。
點擊翻回
QUESTION
「錯誤預算沒用完」為什麼是浪費?
點擊翻面
ANSWER
它代表你本來可以更快發版、做更激進的實驗,而你沒有。超出需求的可靠性是用創新速度換來的,而使用者感覺不到差別。可靠性是一個要被「剛好花完」的資源。
點擊翻回
QUESTION
error budget policy 該寫什麼?為什麼必須事先簽字?
點擊翻面
ANSWER
寫「預算剩多少時可以做什麼」:>50% 正常發版、<20% 只發修復類、用完凍結功能發版。必須事先簽字,因為預算用完那一刻一定是最不想凍結的時候——那時才討論,答案永遠是「這次特殊」。
點擊翻回
QUESTION
錯誤預算的視窗該用日曆月還是滾動視窗?
點擊翻面
ANSWER
建議 30 天滾動。日曆月會在月初「重置」,形成壞誘因(月底出事只要撐幾天就沒事);滾動視窗讓事故的影響持續 30 天才淡出,更能反映最近的健康狀況。
點擊翻回
QUESTION
burn rate 怎麼算?burn rate = 1 代表什麼?
點擊翻面
ANSWER
目前錯誤率 / 允許錯誤率。=1 表示剛好在期末用完預算,是可接受的;=10 表示 30 天的預算 3 天就燒完。要告警的是燒太快,不是「有錯誤」。
點擊翻回
QUESTION
多視窗多燃燒率告警中,短視窗負責什麼?
點擊翻面
ANSWER
確認問題仍在持續——它讓告警「停止」。只有長視窗的話,一次 5 分鐘的尖峰會讓 1 小時視窗維持高 burn rate,告警在問題恢復後還多響 55 分鐘。條件要寫成長短視窗都超標。
點擊翻回
QUESTION
SLO 與 SLA 的差別?兩者的數字該怎麼設?
點擊翻面
ANSWER
SLO 對內(違反觸發 error budget policy),SLA 對客戶(違反要賠錢)。SLO 必須比 SLA 嚴格,這樣你會在賠錢之前先被自己的機制攔下來——兩者訂成一樣是常見錯誤,等於沒有預警空間。
點擊翻回
QUESTION
SLO 的三個盲點是什麼?
點擊翻面
ANSWER
①統計會稀釋個案——99.9% 達標的同時可能有一個大客戶 100% 失敗(B2B 要依 tenant 拆 SLI)②不涵蓋還沒發生的風險(憑證要到期、磁碟快滿)——要靠飽和度指標 ③不會告訴你為什麼,根因還是要回到前五章的工具。
點擊翻回