iT邦幫忙

2025 iThome 鐵人賽

1
Build on AWS

AWS架構師的自我修養:30天雲端系統思維實戰指南系列 第 42 篇

Day 24 | 定義與衡量可靠性:SRE 方法與錯誤預算的實踐(上) - SLI、SLO 與錯誤預算的核心概念,平衡創新速度與系統穩定性的數據驅動決策

  • 分享至 

  • xImage
  •  

今天,我們將聊聊網站可靠性工程 (Site Reliability Engineering, SRE) 方法論,,將 系統可靠性 從一個模糊的概念轉化為一門可量化的工程學科。

在現代軟體開發的戰場上,一場永無休止的拉鋸戰幾乎在每個組織中上演:

  • 創新的力量 (Devs & Product Managers): 他們渴望快速迭代,推出新功能,搶佔市場。他們是組織的「油門」。
  • 穩定的力量 (Ops & Infra Teams): 他們負責保障服務的正常運行,避免故障,確保使用者體驗。他們是組織的「煞車」。

傳統上,這兩股力量的目標看似根本對立,兩者的溝通往往充滿了摩擦、猜疑與主觀的情感辯論。

「你們的新功能搞爆了伺服器!」

「你們的流程限制了創新!」

這樣的爭吵,是許多工程師白日與深夜的夢魘。

這種衝突,源於雙方缺乏一個共同的語言和目標,雖然我們在<跨團隊協作設計:技術文件、OpenAPI、共用契約 : API 文檔化與團隊協作標準建立>中有說到系統邊界的共同默契,但這次的拔河本質上來說更接近 零和競賽 ,想要追求功能快速發布就不能百分百確保功能的完整,反之亦然,要百分百確保功能的完整就有可能賠上進入市場的時機,一個是尋找新的系統生命依據,一個是確保當前的系統生命依據。兩者並沒有對錯,著重在立場而已。

SRE (Site Reliability Engineering) 的誕生,就是為了解決這個衝突,它提出了一個革命性的觀點:

我們 不應該問「是否要踩煞車」 ,而 應該問「我們離前方的懸崖還有多遠?」

SLI, SLO, 和 Error Budget,就是我們用來精確測量「與懸崖之間距離」的工程儀器。

我有幸在撰寫這個系列文章的時候(2025)見證到人類殖民太空的希望,晶片的突破、算力的解放與 AI 的精度提高,複合性的因子正在解放傳統人力的勞動成本。伊隆·馬斯克是一個夢想家,他本可將資產再次投入到舊時代金融遊戲之中成為新一代的華爾街家族,但卻選擇了將資產投入至新時代的太空火箭研發上開拓人類未來的可能性。如果機會,我會主動報名太空冒險與前往殖民 - 地球的重力束縛了我的靈魂,接下來,請包容一下我的任性與浪漫,讓我用太空殖民的「氧氣預算」來做舉例說明。

月球殖民隊的「氧氣預算」—— 生存與探索的平衡

我們是一艘月面探險船的船長,任務是探索一個人類從未到過的月球峽谷。探險船上最主要有兩個團體:

  • 船上的科學家 (開發團隊):他們渴望新發現。他們想讓潛水器在月球峽谷停留更久、探索更遠的未知區域、使用高耗能的探測設備。
  • 船上的維生系統工程師 (維運團隊):他們只關心一件事:確保所有人能活著回到月面基地。他們緊盯著氧氣存量、電池電量和艙體壓力。

如果沒有 SRE,這將是一場意志力的較量,科學家會不斷施壓、要求「再多待一小時」,而工程師會堅決反對,理由是「安全第一」。

SRE 的導入,就是將「氧氣存量」明確定義為錯誤預算。

  • SLO:本次任務必須在 70% 的氧氣安全存量下開始返航。
  • Error Budget:這意味著我們有 **30% 的「探索預算」**可以消耗。

現在,所有決策都變得清晰:

  • 開啟高功率聲納探測?可以,但儀表板會顯示這將消耗 5% 的氧氣預算。
  • 在一個有趣的隕石坑多停留 30 分鐘?可以,這將消耗 10% 的氧氣預算。
  • 航行到一個更遠的月面山脈?可以,但往返航程將消耗 15% 的氧氣預算。

船長和所有船員都能在一個巨大的螢幕上看到預算的即時消耗情況。科學家可以自主決定如何「花費」他們的預算來最大化科研成果。一旦預算消耗殆盡,警報會自動響起,系統會鎖定高耗能設備,探險艇必須無條件返航。

SRE 的重要性:它將「風險」這個模糊的概念,轉化為一個可以被量化、被交易、被管理的戰略資源。它讓團隊不再爭論「要不要冒險」,而是共同決策「我們的風險預算應該花在哪個最值得的地方」。

SRE 的核心洞見在於:系統的可靠性不應該是一個模糊不清、無法捉摸的藝術,而是一門可以被 精確定義、 量化 、並透過 工程方法 來系統性提升的科學。

SRE 方法論的核心思維

SRE 的第一個顛覆性思維是: 100% 的可靠性是一個謊言,更是一個陷阱。

追求絕對的完美,不僅成本高昂到不切實際,更會扼殺所有創新的可能性,況且,使用者其實 並不在乎我們的系統是否達到 100% 可用 ,他們 在乎的是系統在他們需要時「足夠可靠」。

因此,SRE 的核心不是「消除」錯誤,而是將「錯誤」或「不可靠」視為一種有限的、可管理的資源,這就引出了我們今天的三個主角: SLI (Service Level Indicators)、SLO (Service Level Objectives) 、Error Budget (錯誤預算)

從「永遠不當機」到「適度可靠」

100% 可靠性的神話與陷阱

追求「五個九」(99.999%) 甚至更高的可靠性,不僅在技術上幾乎不可能(我們無法控制骨幹網路、硬體故障,甚至太陽閃焰),在商業上更是一個災難。可靠性的成本並非線性增長,而是指數級的。

  • 從 99% 到 99.9%:可能需要增加一些備援伺服器。
  • 從 99.9% 到 99.99%:可能需要建立跨洲的異地備援、更複雜的負載平衡與資料同步機制。
  • 從 99.99% 到 99.999%:成本將會高到難以想像,需要極度複雜的架構,而這份複雜性本身又會成為新的故障來源。

最關鍵的是,這鉅額的投入,使用者真的在乎嗎?為了避免一年中額外的 5 分鐘停機,而放棄開發使用者真正期盼的新功能,這筆交易真的划算嗎?SRE 強迫我們問這個問題。

SRE 提出了一個顛覆性的觀點:系統的可靠性,不由我們的伺服器決定,而由我們的使用者定義。

如果我們的系統在凌晨三點,當所有使用者都在睡覺時,當機了一小時,那麼從使用者的角度來看,我們的可用性是 100%。反之,如果我們的網站伺服器全部正常運行,但因為後端資料庫的查詢緩慢,導致每個頁面都需要 30 秒才能載入,那麼從使用者的角度來看,我們的服務就是 「不可用」 的。

這就是為何我們在前一堂課強調 SLI 必須反映使用者體驗。我們守護的不是機器的運行燈號,而是使用者的滿意度。

「適度可靠」(Appropriately Reliable) 中的「適度」二字,是 SRE 的精髓。它承認可靠性是產品的一個功能 (feature),它有成本,也帶來價值。因此,可靠性的等級應該是一個有意識的、數據驅動的商業決策,而非一個無限追求的技術指標。

一個醫院的心律調節器監控系統,和一個線上梗圖產生器,它們所需要的「適度」可靠性,顯然天差地遠。SRE 的任務,就是與產品和業務方合作,精確定義出符合該產品定位的 SLO,不多不少,恰到好處

系統應該「足夠可靠」,而不是「完美可靠」

這個「足夠」的標準,就是通過 SLI 和 SLO 來科學定義的。

SRE 的三大核心支柱

SLI (Service Level Indicators) → 「如何量化」
SLO (Service Level Objectives) → 「目標是什麼」
Error Budget (錯誤預算) → 「如何決策」

如果說「適度可靠」是 SRE 的指導思想,那麼以下三大支柱,就是將思想轉化為日常實踐的行動框架:

  • 支柱一:以數據定義目標 (Defining Goals with Data)

    • 這是我們已經深入探討過的部分,也是一切的基礎。
    • 核心工具:SLI、SLO、錯誤預算。
    • 核心價值:它為組織內部的所有利害關係人(開發、維運、產品、管理層)提供了一套共同的、客觀的、無可爭議的語言。當討論是否要發布新功能時,我們不再是憑感覺說「我覺得太危險了」,而是可以明確地指出「我們本月的錯誤預算只剩下 15%,根據過往經驗,這次發布有 50% 的機率會消耗掉 20% 的預算,因此風險過高」。這將一場潛在的衝突,轉化為一次基於機率和數據的理性決策。
  • 支柱二:致力消除瑣務 (Engineering against Toil)

    • 這是區分 SRE 與傳統維運最顯著的特徵。
    • 定義「瑣務」(Toil):Google SRE 將其定義為手動的、重複的、可被自動化的、缺乏長期價值的工作。例如,手動重啟一個崩潰的服務、手動配置一台新的伺服器、手動執行一個腳本來清理磁碟空間。這些工作不僅枯燥,更糟的是,它們的規模會隨著系統規模的擴大而線性增長,最終會耗盡所有人的時間。
    • SRE 的工程師本質:SRE 是軟體工程師,他們解決的是「運營問題」。他們的首要任務,不是去「做」這些瑣務,而是去「開發」能夠永久性解決這些瑣務的系統和工具。他們會寫一個自動監控並重啟服務的程式,而不是親手去重啟它。他們會用 Terraform 或 Ansible 來自動化配置,而不是登入到伺服器裡敲指令。
    • 50% 準則:一個健康的 SRE 團隊,應將至少 50% 的時間投入在工程專案上,用以減少未來的瑣務、或提升系統的可靠性。如果瑣務佔據的時間超過 50%,這是一個明確的警訊,代表團隊正被問題淹沒,需要暫停接受新的運營任務,優先進行自動化開發。
  • 支柱三:擁抱風險與管理失敗 (Embracing Risk & Managing Failure)

    • 這是 SRE 在文化層面的體現。在一個健康的 SRE 文化中,失敗不是災難,而是系統提供給我們的最寶貴的學習機會。
    • 無指責驗屍報告 (Blameless Postmortems):當事故發生後,SRE 的首要原則是無指責。焦點永遠在於系統的哪個環節出了問題,而不是哪個操作者犯了錯。因為人為失誤往往只是更深層次的系統性問題的表徵(例如:介面設計不良、缺乏安全校驗、文檔過時)。透過深入、誠實且不追究個人責任的事後分析,團隊才能找到問題的根本原因,並採取工程手段(例如:增加校驗、優化流程、強化自動化)來確保同類問題不再發生。
    • 將錯誤預算作為風險管理的工具:錯誤預算不僅僅是一個被動的監控指標,它更是一個主動的風險規劃工具。團隊可以有意識地「花費」預算來進行混沌工程測試 (Chaos Engineering)、執行高風險的架構升級、或是驗證新功能的穩定性。它賦予了團隊在一個安全的框架內,主動探索系統邊界、擁抱創新的勇氣。

SLI:服務等級指標 - 量化使用者體驗

在建立了 SRE 的宏觀思維框架,現在是時候深入其最關鍵的實踐基礎——服務等級指標 (SLI)。

SLI (Service Level Indicator) 是我們用來衡量服務健康狀況的「體溫計」。

一個好的 SLI,必須滿足一個黃金法則: 它必須能反映真實的使用者體驗 。 我們的伺服器 CPU 使用率是 10% 還是 90%,使用者毫無感覺;但他們點擊「購買」按鈕後,頁面是 0.5 秒載入完成還是 5 秒才回應,這是他們能切身感受到的。

所以,SLI 是從外向內看的指標。我們來舉幾個例子:

  • 可用性 (Availability): 在使用者所有「讀取文章」的請求中,有多少比例是成功返回內容的?
    • 公式: (成功的請求數 / 總請求數) * 100%
  • 延遲 (Latency): 在所有成功的「搜尋商品」請求中,有多少比例的處理時間是在 300 毫秒以內的?
    • 公式: (回應時間 < 300ms 的請求數 / 總成功請求數) * 100%
  • 品質 (Quality): 在所有「影片播放」的請求中,有多少比例是以高畫質 (HD) 串流,而不是降級到標清 (SD)?
    • 公式: (HD 播放次數 / 總播放次數) * 100%

定義 SLI 的過程,就是強迫我們從工程師的本位主義中跳脫出來,開始用我們使用者的眼睛去審視我們自己的產品。

SLI 的核心原則

在建立了 SRE 的宏觀思維框架,現在是時候深入其最關鍵的實踐基礎——服務等級指標 (SLI)。

如果說 SRE 是一門將可靠性科學化的工程學科,那麼 SLI 就是這門科學的度量衡單位。沒有精確的度量,一切的目標(SLO)與預算(Error Budget)都只是空中樓閣。

SLI 必須:

  1. 反映真實的使用者體驗
  2. 可量化與標準化
  3. 少即是多
  4. 與業務目標對齊

1. 絕對的「使用者導向」(User-Centricity)

這是最重要的第一原則。永遠要問: 「我的使用者在乎什麼?」 而不是 「我的伺服器在做什麼?」

  • 反面教材:伺服器 CPU 使用率、記憶體佔用量、網路吞吐量。這些是系統指標 (System Metrics),它們是診斷問題的原因,但不是問題本身。使用者對我們的 CPU 是 10% 還是 90% 毫無感覺。
  • 正面範例:頁面載入速度、請求成功率、檔案上傳完成的時間。這些是使用者能直接感受到的體驗指標 (Experience Metrics)。

2. 可量化與標準化 (Quantifiable & Standardized)

SLI 必須是一個可以計算的數字,通常是比例或分佈。最常見的標準化格式是:

SLI = (好的事件數量 / 有效的事件總數) * 100%

這個簡單的公式強迫我們去清晰地定義何謂「好」的事件、何謂「有效」的事件。例如,對於一個 API 的可用性 SLI:

  • 好的事件:HTTP 回應碼為 2xx 或 3xx 的請求。
  • 有效的事件:所有的請求,但排除掉那些因使用者端錯誤導致的請求(例如 HTTP 4xx),因為那不是我們系統的責任。

3. 少即是多 (Less is More)

一個服務不應該有幾十個 SLI。過多的指標會導致雜訊過多、警報疲勞,並模糊了真正重要的焦點。通常,一個關鍵的使用者旅程,只需要關注 2-3 個核心的 SLI 就足夠了(例如,可用性、延遲、正確性)- 我們要關注的是 資訊濃度。

4. 涵蓋關鍵使用者旅程 (Cover Critical User Journeys)

我們的服務中,並非所有功能都同等重要。我們需要識別出那些對使用者和業務價值最高的路徑,並優先為它們定義 SLI。

  • 對於電商網站:搜尋商品 -> 查看商品詳情 -> 加入購物車 -> 結帳,這條路徑的可靠性,遠比 修改個人頭像 功能的可靠性更重要。
  • 對於影音平台:影片播放成功率 和 起播延遲,是比 發表評論 更核心的 SLI。

SLI 的四大類型 (Four Golden Signals):

信號類型 定義 使用者關心的問題 AWS 實作範例
延遲 (Latency) 處理請求所需的時間 「網站載入速度如何?」 CloudWatch ResponseTime
流量 (Traffic) 系統需求的度量 「系統能處理多少使用者?」 CloudWatch RequestCount
錯誤 (Errors) 失敗請求的速率 「功能是否正常工作?」 CloudWatch 4xx/5xx Error Rate
飽和度 (Saturation) 服務資源使用程度 「系統會不會崩潰?」 CloudWatch CPU/Memory Utilization

身為一個「系統與體驗的架構師」(Architect of Systems & Experiences),我們的任務不僅是建構系統,更是要確保我們所建構的系統,真正在為最有價值的「體驗」服務。辨別出這些關鍵路徑,就是我們架構工作的「定錨點」。

** SRE 實踐的核心不僅是一個 技術問題 ,更是一個 商業策略問題。SRE 實踐的核心其實是: 「如何找到一個數位產品的靈魂?」 **

這不應該只靠直覺,而是需要一套系統性的方法論。我這邊分享當初在執行數位行銷投放的一個結合價值與頻率的二維框架,以及一套三層透鏡的分析法,來精準地定位這些路徑。

首先,要辨別一個使用者路徑的重要性,我們必須從兩個維度去評估它:它為業務帶來多少 價值 (Value) ,以及它被使用的 頻率 (Volume)。將所有功能與路徑放入這個四象限中,它們的優先級便一目了然。

quadrantChart
    title SRE 優先級矩陣:業務價值 vs 使用頻率
    x-axis "低頻率" --> "高頻率"
    y-axis "低價值" --> "高價值"

    quadrant-1 "生命線 (The Lifeline)"
    quadrant-2 "關鍵時刻 (Critical Moments)"
    quadrant-3 "周邊功能 (Periphery)"
    quadrant-4 "基礎設施 (Foundation)"

    "商品搜尋": [0.8, 0.9]
    "影片播放": [0.85, 0.95]
    "訊息流載入": [0.9, 0.85]

    "結帳流程": [0.2, 0.95]
    "用戶註冊": [0.15, 0.9]
    "訂閱付費": [0.1, 0.95]

    "修改頭像": [0.1, 0.1]
    "撰寫評價": [0.2, 0.15]
    "更換主題": [0.05, 0.05]

    "用戶登入": [0.7, 0.3]
    "訂單歷史": [0.6, 0.25]
    "發表評論": [0.65, 0.2]

第一象限:生命線 (The Lifeline) - 高價值,高頻率

特徵:這是我們產品的心跳。使用者每天、每小時都在使用這些功能,並且它們直接或間接地貢獻了絕大部分的商業價值。

範例:

  • 電商平台:商品搜尋、瀏覽商品列表頁
  • 影音平台:影片播放、首頁內容推薦
  • 社群平台:訊息流 (Feed) 的載入

SRE 策略:必須設定最嚴苛的 SLI/SLO。可用性、延遲、正確性三者缺一不可。錯誤預算極其珍貴,任何消耗都需立刻警覺。這是我們需要投入最多監控與自動化資源的地方。

第二象限:關鍵時刻 (The Critical Moments) - 高價值,低頻率

特徵:這些是決定性的、高風險的「臨門一腳」。使用者不常執行,但一旦執行,就絕對不容許失敗。失敗的後果往往是直接的營收損失或用戶流失。

範例:

  • 電商平台:結帳流程、註冊新帳號
  • 影音平台:訂閱付費
  • SaaS 服務:數據導出、年度報告生成

SRE 策略:SLO 同樣嚴苛,尤其是在可用性 (Availability) 與正確性 (Correctness) 上。延遲的容忍度可能稍高於第一象限,但失敗是不可接受的。災難恢復計畫與數據一致性的保障是此象限的重點。

第三象限:周邊功能 (The Periphery) - 低價值,低頻率

特徵:這些是次要或輔助性的功能,對核心體驗影響不大。

範例:

  • 電商平台:修改個人頭像、撰寫商品評價
  • 影音平台:更換佈景主題

SRE 策略:設定最寬鬆的 SLO。監控的重點是確保它們「沒有完全壞掉」,而不是追求極致的性能。這些功能的錯誤預算可以相對充裕,甚至可以作為新技術或高風險變更的試驗田。

第四象限:基礎設施 (The Foundation) - 低價值,高頻率

特徵:這些是構成使用者體驗背景的基礎功能。它們本身不直接創造巨大價值,但如果它們壞了,會讓整個產品感覺「不對勁」,影響使用者信任感。

範例:

  • 電商平台:登入、查看訂單歷史
  • 影音平台:發表評論、新增播放清單
  • 通用:查看幫助文檔 (Help/FAQ)

SRE 策略:需要可靠,但 SLO 可以比前兩者寬鬆一些。重點在於穩定與一致。我們可以容忍短時間的性能下降,但不能完全不可用。自動化修復 (self-healing) 是此處的關鍵。

我們有了基礎框架後,要如何將功能準確地填入象限中?我們需要透過三種不同的「透鏡」去審視我們的產品,這就是我們的標準作業程序 (SOP)。

SRE 關鍵路徑識別的三層透鏡分析法

要精準地辨別出使用者旅程的重要性,我們必須從三個不同的角度來審視我們的產品。這套三層透鏡的分析法,能確保我們不會遺漏任何關鍵的洞察。

graph TD
    A[產品功能清單] --> B[第一層:數據透鏡]
    A --> C[第二層:質化透鏡]
    A --> D[第三層:戰略透鏡]

    B --> B1[網站分析工具<br/>Google Analytics]
    B --> B2[應用效能監控<br/>APM: Datadog, New Relic]
    B --> B3[後端日誌分析<br/>Logs & Metrics]

    B1 --> B4[流量/請求量數據<br/>定位 X 軸:頻率]
    B2 --> B5[轉換漏斗分析<br/>識別流失環節]
    B3 --> B6[功能使用率統計<br/>營收貢獻分析<br/>定位 Y 軸:價值]

    C --> C1[產品經理訪談<br/>商業目標理解]
    C --> C2[客服團隊反饋<br/>用戶痛點識別]
    C --> C3[業務/銷售團隊<br/>付費意願分析]
    C --> C4[用戶直接訪談<br/>真實需求挖掘]

    C1 --> C5[核心功能識別]
    C2 --> C6[關鍵問題定位]
    C3 --> C7[商業價值驗證]
    C4 --> C8[用戶體驗洞察]

    D --> D1[公司 OKRs<br/>季度/年度目標]
    D --> D2[商業模式畫布<br/>Business Model Canvas]
    D --> D3[競爭對手分析<br/>市場定位]

    D1 --> D4[品牌承諾分析<br/>最快/最可靠/最便宜]
    D2 --> D5[戰略目標對齊<br/>成長引擎識別]
    D3 --> D6[未來發展規劃<br/>新功能優先級]

    B4 --> E[綜合分析]
    B5 --> E
    B6 --> E
    C5 --> E
    C6 --> E
    C7 --> E
    C8 --> E
    D4 --> E
    D5 --> E
    D6 --> E

    E --> F[SRE 優先級矩陣<br/>業務價值 vs 使用頻率]

    F --> F1[生命線<br/>高價值 + 高頻率]
    F --> F2[關鍵時刻<br/>高價值 + 低頻率]
    F --> F3[基礎設施<br/>低價值 + 高頻率]
    F --> F4[周邊功能<br/>低價值 + 低頻率]

    style B fill:#e1f5fe
    style C fill:#f3e5f5
    style D fill:#e8f5e8
    style E fill:#fff3e0
    style F fill:#ffebee

第一層:數據透鏡 (The Quantitative Lens) - 客觀事實

這是我們的第一步,用數據說話。

工具:網站分析工具 (Google Analytics)、應用效能監控 (APM, 如 Datadog, New Relic)、後端日誌 (Logs)。

我們要找的指標:

  • 流量/請求量:哪些頁面、API 端點的呼叫次數最多?(定位 X 軸:頻率)
  • 轉換漏斗 (Conversion Funnel):在「瀏覽 -> 加入購物車 -> 結帳」這個漏斗中,每一步的用戶數量有多少?哪個環節流失率最高?
  • 功能使用率:有多少比例的活躍用戶使用過某項功能?
  • 營收貢獻:哪些交易或功能直接產生收入?(定位 Y 軸:價值)

第二層:質化透鏡 (The Qualitative Lens) - 人性洞察

數據告訴我們「發生了什麼」,但質化分析告訴我們「為什麼重要」。

工具:與人交談。

我們要訪談的對象:

  • 產品經理 (Product Managers):他們最清楚產品的願景與商業目標。問他們:「如果讓我們賭上自己的薪水,我們認為哪個功能絕對不能倒?」
  • 客服團隊 (Customer Support):他們是離使用者抱怨最近的人。問他們:「哪一類型的問題最常接到客訴電話?什麼問題會讓使用者暴跳如雷?」
  • 業務/銷售團隊 (Sales):他們知道客戶願意為什麼功能付錢。問他們:「我們產品的哪個賣點,是簽下合約的關鍵?」
  • 使用者 (Users):如果可能,直接進行用戶訪談。問他們:「我們今天打開我們 App,最想完成的一件事是什麼?」

第三層:戰略透鏡 (The Strategic Lens) - 未來方向

最後,我們需要從公司的高度來審視。

工具:公司季度/年度目標 (OKRs)、商業模式畫布 (Business Model Canvas)、競爭對手分析。

我們要思考的問題:

  • 品牌承諾:我們的品牌是「最快」、「最可靠」還是「最便宜」?如果我們承諾「快」,那麼搜尋與頁面載入速度的 SLI 就至關重要。
  • 戰略目標:公司本季的目標是「提升新用戶註冊率」嗎?如果是,那「註冊流程」這個低頻率路徑的價值,在本季就應該被策略性地調高。
  • 未來發展:我們即將推出一個基於 AI 推薦的新功能,並計畫將其作為下一個成長引擎嗎?那麼這個新功能的 SLI,從第一天起就應該被視為潛在的「生命線」。
服務類型 SLI 類別 指標定義 (公式) 說明
使用者請求驅動服務(如:Web API, 電商網站) 可用性 (Availability) (HTTP 2xx/3xx 回應數) / (總請求數 - HTTP 4xx 回應數) 衡量服務是否「活著」並能成功處理合法請求
延遲 (Latency) (回應時間 < N 毫秒的請求數) / (總成功請求數) 衡量服務反應速度。通常會設定多個分位點,如 95% (p95) 和 99% (p99)
正確性 (Correctness) (返回符合預期內容的成功請求數) / (總成功請求數) 衡量服務的回應內容是否正確。例如,搜尋 API 雖返回 HTTP 200,但結果為空,這可能就是一個「不正確」的回應
數據處理管線(如:ETL, 報表生成) 新鮮度 (Freshness) 數據處理完成時間 - 數據生成時間 < N 小時 衡量數據產出的即時性。使用者在乎報表數據是不是昨天的最新數據
覆蓋率 (Coverage) (成功處理的記錄數) / (總應處理的記錄數) 衡量數據處理是否完整,有沒有遺漏
正確性 (Correctness) (通過數據驗證的輸出數) / (總輸出數) 衡量產出的數據是否符合業務規則或品質標準
儲存系統(如:資料庫, 物件儲存) 可用性 (Availability) (成功的讀/寫操作數) / (總讀/寫操作數) 衡量儲存系統是否能正常存取
耐久性 (Durability) 通常是設計目標,而非即時 SLI 衡量數據儲存後不會丟失的概率。這通常是透過架構設計(如多副本、校驗碼)來保障,而非即時監控

SLI 監控儀表板設定

定義了 SLI 之後,下一步就是將它們視覺化,變成一個能指導決策的儀表板。一個優秀的 SRE 儀表板,應該能在 30 秒內回答以下問題:「我們的服務現在好嗎?我們還有多少犯錯的空間?」

儀表板核心元件架構

graph TD
    A[SRE 監控儀表板] --> B[決策層面]
    A --> C[監控層面]
    A --> D[診斷層面]

    B --> B1[錯誤預算剩餘<br/>🟢 充足 🟡 警告 🔴 危險]
    B --> B2[預算消耗速率<br/>Burn Rate 指標]
    B --> B3[SLO 達成狀態<br/>✅ 達成 ❌ 違反]

    C --> C1[SLI 即時表現<br/>可用性/延遲/品質]
    C --> C2[SLO 目標線<br/>承諾的及格線]
    C --> C3[趨勢分析<br/>28天滾動窗口]

    D --> D1[系統指標<br/>CPU/Memory/Network]
    D --> D2[錯誤日誌<br/>快速診斷連結]
    D --> D3[事件時間軸<br/>歷史事件回顧]

1. SLO 目標線 (The SLO Target Line)

這是儀表板上最重要的視覺元素。一條清晰的水平線,代表我們團隊承諾的目標(例如 99.9%)。所有指標都應該與這條線進行比較。

2. 當前 SLI 表現圖 (Current SLI Performance Graph)

一條隨著時間變動的曲線圖,顯示在特定時間窗口內(例如,滾動的 28 天)的 SLI 實際表現。我們一眼就能看出當前是在目標線之上還是之下。

3. 錯誤預算消耗圖 (Error Budget Burn-down Chart)

這是將 SRE 理念落實到決策層面的關鍵圖表。它顯示了從週期開始(例如,每月 1 號)到現在,剩餘的錯誤預算百分比或具體的「不可靠時間」(例如,剩餘 15.3 分鐘)。當這條線趨近於零時,所有人都會知道創新的「油門」必須鬆開了

graph LR
    subgraph "錯誤預算消耗視覺化"
        A[月初: 100%<br/>43.2 分鐘] --> B[第一週: 95%<br/>41.0 分鐘]
        B --> C[第二週: 85%<br/>36.7 分鐘<br/>🟡 事件影響]
        C --> D[第三週: 78%<br/>33.7 分鐘<br/>🟡 警告狀態]
        D --> E[第四週: 15%<br/>6.5 分鐘<br/>🔴 危險狀態]
    end

4. 預算消耗速率與預警 (Burn Rate & Alerts)
一個好的儀表板不只顯示「還剩多少」,更要預測「能撐多久」。

  • 消耗速率 (Burn Rate):一個指標,顯示我們的錯誤預算正在以多快的速度被消耗。例如,Burn Rate = 2 意味著我們消耗預算的速度是正常預期的 2 倍,預計在半個週期內就會用完。
  • 預警 (Alerts):警報不應該只在「SLO 被違反」時才觸發,那已經太晚了。更重要的是在「如果當前的消耗速率持續,我們的預算將在 X 天內耗盡」時就提前發出警告,讓團隊有時間做出反應。

儀表板佈局範例

左上角 (最顯眼位置):用最大號字體顯示當前剩餘的錯誤預算。這是最重要的決策依據。

右上角:顯示幾個核心 SLI(可用性、延遲)相對於 SLO 目標線的長期趨勢圖。

下方:提供更詳細的數據圖表、相關的系統指標(CPU、Memory)以及錯誤日誌的快速連結,方便在問題發生時進行深入診斷 (drill-down)。

graph TB
    subgraph "SRE 監控儀表板視覺佈局"
        subgraph "頂部區域 - 關鍵決策資訊"
            A1[錯誤預算剩餘<br/>85.3%<br/>🟢 健康狀態]
            A2[預算消耗速率<br/>Burn Rate: 1.2x<br/>🟡 輕微超標]
            A3[當前 SLO 狀態<br/>可用性: 99.92%<br/>延遲: P95 450ms<br/>✅ 全部達成]
        end

        subgraph "中間區域 - 趨勢監控"
            B1[SLI vs SLO 趨勢圖<br/>📈 28天滾動視窗]
            B2[錯誤預算消耗圖<br/>📉 預算燃燒趨勢]
        end

        subgraph "底部區域 - 詳細診斷"
            C1[系統指標<br/>CPU/Memory<br/>詳細數據]
            C2[錯誤日誌<br/>最新 50 筆<br/>快速連結]
            C3[事件時間軸<br/>歷史事件<br/>根本原因]
        end
    end

掌握了如何定義、衡量並監控 SLI,我們就掌握了 SRE 實踐的基石。接下來的 SLO 設定與錯誤預算管理

SLO:服務等級目標 - 可靠性的目標線

SLO (Service Level Objective) 是我們為 SLI 設下的「及格線」。

它是一個具體的目標,是我們和我們的使用者、我們的業務團隊之間的一個公開承諾。它通常以百分比的形式,在一個特定的時間窗口內定義。

延續上面的例子:

  • 可用性 SLO: 「在過去 28 天內,99.9% 的『讀取文章』請求必須成功。」
  • 延遲 SLO: 「在過去 28 天內,95% 的『搜尋商品』請求必須在 300 毫秒內完成。」

設定 SLO 是一門藝術,也是一門生意 - 它不是越高越好。

一個 99.9% 的 SLO(常被稱為 "three nines")和一個 99.999% 的 SLO ("five nines"),背後的工程成本和複雜度是天壤之別。我們需要問自己:為了這額外的 0.099% 的可靠性,所付出的巨大成本,真的能為使用者帶來對等的價值嗎?還是說,把這些資源投入到開發一個新功能會更有價值?

如果 SLI 是溫度計,那麼 SLO 就是我們根據科學與經驗,為我們的溫室設定的「最佳生長溫度」。溫度太高(目標設太嚴苛),會耗盡所有能源,扼殺成長;溫度太低(目標設太寬鬆),則會讓作物(使用者體驗)枯萎。

設定 SLO,不是一個單純的技術決策。它是一場精密的外交談判,是我們在技術可能性、使用者期望、與商業成本之間,尋找那個最佳平衡點的過程。

SLO 是產品、開發、維運三方共同協商的結果。它是一條數據化的界線,明確定義了什麼叫做「服務運行良好」。

SLO 設定的藝術與科學

一個 SLO 數字的背後,蘊含著對商業的深刻理解和對技術的精準掌握 - 它既是科學方法,也是藝術哲學。常見的 SLO 的設定需要平衡多個因素:

SLO 設定考量因素:
使用者期望:使用者能容忍的服務品質底線
商業影響:服務中斷對業務的財務影響
技術現實:系統架構的技術限制
成本效益:提高可靠性的邊際成本
風險承受:組織對於風險的接受度

但我們可以從最主要的兩個面向 數據驅動的客觀基礎 (The Science) 與 藝術面:策略導向的主觀決策 (The Art) 來進行脈絡的設定

科學面:數據驅動的客觀基礎 (The Science)

這是 SLO 的邏輯骨架。我們不憑感覺,而是讓數據引導我們找到合理的起點。

  • 分析歷史數據 (Analyze Historical Performance):
    • 我們的 SLI 在過去一個季度或半年的表現如何?這不是看平均值,而是看分佈。
      • P95(95% 的時間)的延遲是多少?P99 是多少?
    • 歷史數據是我們最誠實的顧問,它告訴我們系統的內在能力在哪裡。
    • 直接設定一個遠超歷史最佳表現的 SLO,是不切實際的。
  • 理解邊際效益 (Understand Diminishing Returns):
    • 從 99% 提升到 99.9% 的成本,和從 99.9% 提升到 99.99% 的成本,是指數級的差異。
    • 我們必須問:為了這額外的 0.09% 可靠性,所投入的巨大工程資源,是否能帶來對等的使用者滿意度或商業回報?
      • 在某個點之後,繼續提升可靠性的投資報酬率會急遽下降。
  • 關聯性分析 (Correlate with Business Metrics):
    • 範例: 將我們的 SLI 數據與商業指標(如:使用者留存率、購物車放棄率、訂閱轉換率)進行對比
      • 我們發現一個有趣的模式:當頁面延遲從 200ms 降到 100ms 時,轉換率可能顯著提升;但從 100ms 降到 50ms,可能就幾乎沒有變化了。
    • 這個數據上的「懸崖」或「平原」,就是設定 SLO 的強力科學依據。

藝術面:策略導向的主觀決策 (The Art)

如果科學告訴我們「能做到哪裡」,藝術則告訴我們「應該做到哪裡」。

  • 使用者期望管理 (Manage User Expectations):
    • 使用者對「好」的定義是什麼?這往往是相對的。
    • 如果我們的競爭對手網站快如閃電,那麼我們的 SLO 就不能太寬鬆。
      • 反之,如果我們的產品是一個內部使用的後台系統,使用者對偶發的延遲容忍度就高得多。
    • 藝術,就是理解並塑造使用者的心理感受。
  • 品牌承諾的體現 (Reflect Brand Promise):
    • 我們的公司想傳遞給世界的品牌形象是什麼?是像頂級跑車一樣的「極致性能」,還是像豐田一樣的「絕對可靠」?
    • 我們的 SLO 必須與品牌承諾保持一致。
      • 一個宣稱「永不中斷」的金融交易系統,其 SLO 必然要比一個實驗性的社群 App 嚴苛得多。
  • 作為談判的籌碼 (Use as a Negotiation Tool):
    • SLO 是我們與產品、業務團隊溝通的契約。
      • 當產品經理要求一個極高的 SLO 時,我們可以用數據清晰地向他展示達成該目標所需的工程成本,並反問:「我們是否願意為了這個目標,推遲下個季度三個新功能的開發?」
    • 這將一場感性的要求,轉化為一場理性的資源配置討論。

SLO 設定的最佳實踐

遵循以下原則,可以讓我們的 SLO 設定過程更順暢、更有效。

  1. 從簡開始 (Keep it Simple):不要試圖為系統的每個角落都設定 SLO。從我們之前討論過的「關鍵使用者旅程」開始,為每個旅程選擇不超過 3 個最重要的 SLI 來設定 SLO(通常是可用性、延遲)。

  2. 永遠不要設定 100% (Never Set 100%): 100% 的 SLO 意味著零錯誤預算,這在現實世界中是不可能的。它不僅扼殺了所有變更與創新,也為團隊設定了一個註定失敗的目標,打擊士氣。

  3. SLO 是活的,持續迭代 (Iterate and Refine):我們的第一個 SLO 很可能不是最完美的。設定一個初始目標,運行一兩個週期,然後根據實際情況、錯誤預算的消耗速率和使用者回饋,進行調整。它是一個需要持續校準的羅盤。

  4. 確保共同承擔 (Ensure Shared Ownership):SLO 不是 SRE 團隊的個人目標。它必須是產品、開發、SRE 團隊共同討論、一致同意並公開簽署的共同契約。當錯誤預算耗盡時,承擔後果(例如凍結發布)的是整個產品團隊,而不僅僅是 SRE。

  5. 明確定義衡量窗口 (Define the Measurement Window):我們的 SLO 是基於「過去 7 天」還是「過去 28 天」計算的?較短的窗口對故障更敏感,反應更快;較長的窗口更能反映長期趨勢,避免對短暫的波動過度反應。通常,「滾動的 28 天或 30 天」是一個很好的起點。

SLO 實施策略

在組織中推行 SLO 是一項文化變革,不能一蹴可幾。建議採用「起步-行走-奔跑」的三階段策略。

第一階段:起步 (Crawl)

  • 目標:學習與驗證。
  • 行動:
    1. 選擇 1-2 個內部系統或非絕對核心的外部服務作為試點。
    2. 與該服務的開發和產品團隊組建一個小型的虛擬團隊。
    3. 共同完成一次完整的 SLI/SLO 定義流程。
    4. 建立一個基本的監控儀表板。
  • 重點:在此階段,重點是讓大家熟悉這套語言和流程,允許犯錯。SLO 的準確性不是最重要的,建立共識與學習經驗才是。

第二階段:行走 (Walk)

  • 目標:標準化與擴展。
  • 行動:
    1. 將試點的成功經驗,沉澱為一套標準化的 SLO 設定 SOP。
    2. 將 SLO 實踐擴展到所有「生命線」與「關鍵時刻」的服務上。
    3. 開始正式實施基於 SLO 的錯誤預算政策。當預算耗盡時,必須有明確的應對措施(如:暫停功能發布,召開穩定性會議)。
  • 重點:將 SLO 從一個「監控指標」轉變為一個驅動決策的工具。讓錯誤預算真正開始影響團隊的工作優先級。

第三階段:奔跑 (Run)

  • 目標:全面整合與文化深植。
  • 行動:
    1. 將 SLO 與錯誤預算,全面整合進組織的各個流程中:季度規劃、產品路線圖、發布審核、事故響應、事後檢討 (Postmortem)。
    2. 建立全公司級別的可靠性儀表板,讓管理層也能看懂服務的健康狀況。
    3. SLO 成為評估團隊績效、獎勵高可靠性工程實踐的依據之一。
  • 重點:SLO 不再是一個需要 SRE 團隊去「推動」的東西,它已經內化為整個技術組織思考和溝通的共同語言與核心文化。

Error Budget:錯誤預算 - 創新與穩定的平衡

如果說 SLI 是度量衡,SLO 是羅盤,那麼「錯誤預算」( Error Budget ) 就是驅動整個 SRE 巨輪運轉的 引擎與燃料 。它是 SRE 最具革命性的發明,一個將抽象的商業管理哲學轉化為日常決策的強大機制 - 將 SLO 的概念從一個被動的監控目標,轉化為一個主動的管理工具。

我們將聊聊如何設計一個能自我調節、自我平衡的系統 - 不僅是技術系統,更是組織與文化系統。它用一個公平、透明、數據驅動的法則 (Error Budget),來駕馭團隊的情感 (創新衝動 vs. 穩定焦慮),最終達成共同的理想 (為使用者創造價值)。

在正式開始前,我們來看看鬼故事

決策模式對比:情感驅動 vs 數據驅動

情境一:新功能發布討論

傳統決策模式 (基於情感)

  • Dev: "我們能發布這個新功能嗎?用戶期待已久,競爭對手都有了!"
  • Ops: "不行,上次發布就出事了,太危險了!你們開發總是不考慮穩定性。"
  • Dev: "但是產品經理說這個功能會帶來 20% 的營收提升!"
  • Ops: "我不管什麼營收,我只知道如果系統掛了,所有人都會來罵我們。"
  • Dev: "你們運維總是保守,這樣下去公司會失去競爭力的!"
  • Ops: "保守總比半夜被叫起來修 Bug 好!上次那個事故我們加班到凌晨 3 點。"
  • Manager: "你們別吵了,到底能不能發布?給我一個明確答案!"

SRE 決策模式 (基於數據)

  • Dev: "我們還有足夠的錯誤預算來承擔這次發布的風險嗎?"
  • SRE: "目前錯誤預算僅剩 15%,根據歷史數據,類似功能的發布有 30% 機率消耗 10% 預算。"
  • Dev: "那意味著如果發布失敗,我們會超支錯誤預算?"
  • SRE: "是的,但我們可以降低風險。建議先在 10% 用戶中進行灰度發布,觀察 48 小時。"
  • Product: "灰度發布的風險預估是多少?會影響 SLO 嗎?"
  • SRE: "灰度發布風險降至 5%,預計消耗 1-2% 錯誤預算。如果成功,可以安全擴展到全用戶。"
  • Manager: "很好,數據清晰。批准灰度發布計劃,請持續監控錯誤預算狀況。"

情境二:緊急事故處理

傳統決策模式 (基於情感)

  • Ops: "系統掛了!所有用戶都無法登入,客服電話被打爆了!"
  • Dev: "不可能啊,我們昨天的代碼沒有動登入邏輯!一定是基礎設施的問題。"
  • Ops: "基礎設施一直很穩定,肯定是你們的新代碼有 Bug!"
  • Manager: "現在不是追究責任的時候,趕快想辦法恢復!"
  • Dev: "要不先回滾到上個版本?但是會丟失昨天修復的安全漏洞。"
  • Ops: "那就修復漏洞再發布,但不知道要多久,CEO 已經開始問了..."
  • Manager: "這樣吵下去什麼時候能修好?給我一個時間!"

SRE 決策模式 (基於數據)

  • SRE: "檢測到登入服務可用性降至 25%,已觸發 P1 事故,錯誤預算快速消耗中。"
  • Dev: "根據監控數據,問題出現在數據庫連接池,與昨天的代碼發布時間吻合。"
  • SRE: "MTTR 目標是 30 分鐘。選項一:立即回滾,5 分鐘恢復但重新引入安全風險。"
  • Security: "選項二:熱修復連接池配置,15 分鐘恢復且保留安全修復。"
  • Product: "根據錯誤預算,我們還能承受 8 分鐘停機。選項二風險太高。"
  • SRE: "明確:立即執行回滾計劃。安全漏洞修復重新安排,並建立更嚴格的測試流程。"
  • Manager: "同意。5 分鐘後系統恢復,下週一制定安全漏洞修復的安全發布計劃。"

就像是情境中所呈現的對話內容與交織而成的決策一樣, 錯誤預算將「風險」量化成一種可以交易和管理的「貨幣」。當預算充足時,團隊獲得了自主權,可以大膽創新;當預算耗盡時,整個團隊的唯一目標就是「停止花錢」,即專注於修復問題、提升穩定性,直到預算開始重新累積。它巧妙地將開發和維運的目標統一起來。

今天,我們將徹底拆解這個引擎,從它的 核心原理 到 決策框架,再到如何在 AWS 這個世界級的雲端平台上將它具象化。

錯誤預算的核心概念

錯誤預算的數學定義非常簡單:

Error Budget = (1 - SLO) × Total Time

如果我們的可用性 SLO 是 99.9%,那麼我們的錯誤預算就是 0.1%。

這個 0.1% 代表什麼?它代表了「 被允許的失敗額度 」。它就像我們的零用錢,我們可以自由支配它。我們可以用它來:

  • 發布新功能:任何新功能上線都有風險,可能會引發 Bug,消耗我們的錯誤預算。
  • 進行系統升級:即便計畫性停機維護,也會消耗錯誤預算。
  • 承擔意外故障:非預期的系統中斷會快速燃燒我們的預算。

這個 0.1% 不再是一個消極的「容錯率」,我們必須將它視為一個積極的授權。它代表了我們,作為系統的管理者,向產品與開發團隊所做出的鄭重承諾:

「在不超過這 0.1% 的前提下,你們擁有犯錯的權利。你們可以用這個預算去冒險、去創新、去發布那些可能不完美但極具潛力的新功能。這是你們創新的貨幣。」

想像一下,開發團隊 (Dev) 和維運團隊 (Ops/SRE) 共同管理一個銀行帳戶,戶頭裡的錢就是「錯誤預算」。

開發團隊 想花錢(發布新功能、進行高風險變更),因為花錢可能帶來更高的回報(市場佔有率、使用者滿意度)。

維運團隊 的首要任務是確保戶頭裡永遠有足夠的存款(維持系統穩定),以應對不時之需(非預期的故障)。

在這個模型下,傳統的對立消失了,雙方的目標變得完全一致: 如何以最聰明的方式花費這筆有限的預算,來最大化產品的長期價值。 當帳戶餘額告急時,任何一個理智的成員都會同意:現在必須停止消費,開始賺錢(修復問題、提升穩定性)。

也因此就像最早我們提到的兩種情境 新功能發布討論 、 緊急事故處理 一樣,我們終於終結了會議室裡無休止的拉扯。

錯誤預算驅動的決策框架

有了錯誤預算,我們就有了一個即時的儀表板來指導我們的決策。核心是監控一個關鍵指標:預算消耗速率 (Burn Rate)。

Burn Rate 指的是我們消耗錯誤預算的速度。一個健康的 Burn Rate 應該約等於 1(即按照預期速度消耗)。當 Burn Rate > 1 時,意味著我們正在透支未來的創新能力。

這是一個我們可以直接應用的 SOP (Standard Operating Procedure):

預算狀態 Burn Rate (範例) 狀態燈號 核心原則 決策行動
健康 (Healthy)> 70% 剩餘 Burn Rate ≈ 1 🟢 綠燈 鼓勵創新 • 加速發布:允許更高頻率、更高風險的功能發布• 計畫性實驗:執行混沌工程、壓力測試、架構變更• 安排維護:執行需要短暫停機的資料庫升級等
消耗中 (Depleting)30% - 70% 剩餘 Burn Rate > 2 🟡 黃燈 謹慎前行 • 提高發布門檻:只允許低風險、高價值的變更• 強化測試:要求更全面的自動化測試覆蓋率• 問題分析:分析是哪個功能或變更在快速消耗預算,優先修復
告急 (Endangered)< 30% 剩餘 Burn Rate > 5 🟠 橘燈 準備煞車 • 半凍結 (Slush):暫停所有非緊急的功能發布• 成立應變小組:由 Dev 和 SRE 組成,專注於提升穩定性• 根本原因分析 (RCA):深入調查導致預算快速消耗的根本原因
耗盡 (Exhausted)≈ 0% 剩餘 Burn Rate >> 10 🔴 紅燈 穩定優先 • 硬凍結 (Freeze):嚴禁任何功能性程式碼變更• 全員投入:整個產品團隊的最高優先級是修復 Bug、優化性能、增加測試• 事後檢討 (Postmortem):直到 SLO 回到目標線之上,且預算開始重新累積,才能解除凍結

錯誤預算的 AWS 實作

接下來讓我們來利用一系列 AWS 服務,打造一個自動化、高度視覺化的錯誤預算管理系統。

  1. 數據收集 (Instrumentation) - 我們的神經系統
  • 來源:Amazon CloudWatch Logs (應用程式日誌)、Application Load Balancer (ALB) Access Logs (請求日誌)、CloudWatch Metrics (系統指標)。
  • 目標:捕獲定義 SLI 所需的原始「好事件」與「總事件」數據。例如,ALB 日誌中的 HTTP 狀態碼。
  1. SLI 計算 (Calculation) - 我們的分析大腦
  • 工具:CloudWatch Logs Insights 或 CloudWatch Metric Math。
  • 操作:使用 Logs Insights 查詢日誌,計算在特定時間窗口內的成功請求數和總請求數。
-- 範例:計算過去 1 小時的可用性 SLI
filter @message like /HTTP/
| stats count(backend_status_code) as total_requests,
        count(backend_status_code = 200 or backend_status_code = 304) as good_requests
| extend sli = (good_requests * 100.0 / total_requests)
  1. 使用 Metric Math,將這些計算結果發布為一個自訂的 CloudWatch Metric,命名為例如 WebApp/AvailabilitySLI。這一步是關鍵,它將 SLI 變成了一個可以被長期追蹤和告警的指標。

  2. 視覺化 (Visualization) - 我們的駕駛艙儀表板

  • 工具:Amazon CloudWatch Dashboards 或 Amazon Managed Grafana。
  • 核心組件:
    • SLI 當前值:一個儀錶盤 (Gauge) 圖,顯示即時的 SLI 百分比,並畫出 SLO (例如 99.9%) 的紅線。
    • SLI 長期趨勢:一個折線圖,顯示過去 28 天的 SLI 表現,同樣疊加 SLO 目標線。
    • 錯誤預算燃盡圖 (Burn-down Chart):這是最重要的圖表。我們需要用 Metric Math 建立一個新指標 ErrorBudgetRemaining。
ErrorBudgetRemaining = 100 - ((100 - WebApp/AvailabilitySLI) / (100 - SLO_TARGET)) * 100

這個指標會顯示從 100% 開始,我們的預算還剩下多少。

  1. 警報 (Alerting) - 我們的預警雷達
    • 工具:CloudWatch Alarms 結合 Amazon SNS。
    • 告警策略 (這正是專業的體現):
      • 不要只在 SLO 被違反時告警:那太晚了,相當於船撞上冰山了才拉響警報。
      • 要對「消耗速率」告警:建立一個基於 Burn Rate 的告警。這才是 SRE 的精髓。
    • 黃燈告警 (Paging an Engineer):「若過去 1 小時的錯誤預算消耗速度持續 24 小時,將會耗盡 28 天預算的 10%」。這是一個高優先級、需要工程師介入的警報。
    • 紅燈告警 (Paging the Team Lead):「若過去 2 小時的錯誤預算消耗速度持續,將在 3 天內耗盡所有預算」。這是一個需要團隊管理者介入,考慮凍結發布的嚴重警報。

上一篇
Day 23 | 可觀測性三大支柱(end):從監控到回答未知問題 - Logs, Metrics, Traces 的實踐
下一篇
Day 24 | 定義與衡量可靠性:SRE 方法與錯誤預算的實踐(下) - SLI、SLO 與錯誤預算的核心概念,平衡創新速度與系統穩定性的數據驅動決策
系列文
AWS架構師的自我修養:30天雲端系統思維實戰指南 共 53 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言