從 SLI 開始理解 SRE:SLI / SLO / SLA 的學習筆記

在網站可靠性工程(SRE, Site Reliability Engineering)中,常常會聽到 SLI / SLO / SLA 這三個名詞。
它們看起來相似,但在 SRE 中各自有清楚且不同的定位。

本文將先從最基礎、也最重要的 SLI(Service Level Indicator) 開始,說明可靠性工程是如何被量化與觀測的。


SLI (Service Level Indicator)的定義

SLI = 服務層級指標

它是一組 可以量化的數據,用來衡量系統目前的健康狀態或服務品質。

換句話說,SLI 就是「我們要監控什麼數字,來判斷服務好不好」。


常見的 SLI 指標

常見也最實用的 SLI:

  1. 延遲 (Latency)
    • 請求處理時間,例如:p95 Latency < 500ms
    • 用來衡量使用者感受到的「快或慢」
  2. 錯誤率 (Error Rate)
    • 錯誤請求數 / 總請求數
    • 用來快速判斷服務是否出現異常。
  3. 可用性 (Availability)
    • 成功請求 / 總請求
    • 例如:99.9% availability
  4. 吞吐量 (Throughput)
    • 每秒請求數 (QPS) 或每分鐘交易數
    • 用來看系統能否應付高峰流量

實作範例:Cloud Run + Cloud Monitoring(SLI Dashboard)

以我最近的 Demo 為例,我在 GCP Cloud Run 部署了一個服務,並用 Cloud Monitoring 建立了三個 SLI
 指標,嘗試練習設定 指標的設計以及觀測的方式。

  • 左上 - Latency (p95)
    追蹤 95% 請求的回應時間,用來判斷使用者是否感覺服務變慢
    (這個網站應用程式都是使用免費的方案,所以很慢)
  • 右上 - Error Rate (%)
    計算 5xx 錯誤請求數 / 總請求數
    (因 Cloud Run 最小實例數設為 0,冷啟動期間曾短暫出現 5xx 錯誤)
  • 左下 - Request Throughput (QPS)
    每秒請求數,用來觀察流量變化
    (在後段刻意產生較多請求時,可觀察延遲隨流量上升)

這三張圖表放在同一個 Dashboard,就能快速回答:

  • 使用者是不是覺得慢?(Latency)
  • 系統是不是掛了?(Error Rate)
  • 流量是不是暴增?(Throughput)

為什麼 SLI 很重要?

因為 沒有數字,就沒有可靠性

SRE 的核心不是「憑感覺」判斷系統健康,而是用 SLI 這些可量化的數據,建立可靠的決策依據。

SLI 定義好之後,我們才能進一步設定 SLO (目標),最後再延伸到 SLA (客戶承諾)


SLO(Service Level Objective)

SLO 可以當作替剛剛的 SLI 畫出的一條「合格線」,而且必須同時包含:

  • 指標定義(SLI)
  • 門檻條件(例如 latency < 200ms、status < 500)
  • 目標比例(99%、95%)
  • 評估時間窗(Rolling period / Calendar period,如 7 天、30 天、90 天)

設定 SLO 時,通常會依序進行:

  1. 定義什麼是「好請求 / 壞請求」
  2. 設定門檻條件
  3. 設定目標比例與時間窗


在 Google Cloud Monitoring 中,第一步會先選擇 SLI 類型,用來決定如何判斷請求的好壞。

  1. Availability
    • 用成功請求 / 總請求次數。
    • 適合 API、Web 服務,代表「服務有沒有回應」。
    • 例如:我要 99% 的 API request 都能成功回覆。
  2. Latency
    • 衡量「多少比例的請求低於某個延遲門檻」。
    • 適合對反應速度要求高的服務。
    • 例如:95% 的請求要在 200ms 內完成。
  3. Other (advanced)
    • 自定義 SLI。
    • 可以把應用程式的 自定義 metrics(例如:上傳圖片成功率、特定 API 的錯誤比例)丟進 Cloud Monitoring,再用這裡來建。
    • 比較進階,適合之後要做產品特定的可靠性指標。

SLA(Service Level Agreement)

SLA 是將 SLO 寫進對外合約,並附帶後果的承諾。

  • SLO:內部工程與營運目標
  • SLA:對使用者的正式承諾

例如:「本服務保證 99% uptime,若未達成,將退還 10% 服務費用。」


總結

在學習 SRE 的過程中,我發現「可靠性」並不是什麼抽象概念,而是從一些可以被量化的指標開始慢慢建立起來的。

SLI 是實際用來觀測系統狀態的數字,SLO 則是在這些數字之上,替系統畫出一條「大致可接受的範圍」,而 SLA 則是把這些目標正式寫成對外的承諾。

對我來說,先把 SLI 定義清楚,是理解 SRE 非常重要的一步。因為只有當指標明確,後續在可靠性與開發速度之間的取捨,才有討論的基礎。

這篇文章主要是整理我目前對 SLI / SLO / SLA 的理解,之後也會再繼續記錄學習 SRE 過程中的一些心得。

Victor
Victor

哈囉!

文章: 230

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *