SRE — 監控與SLI
- SLI(Service Level Indicators)服務水準指標 —
用於溝通有關服務的量化資料,通常用於衡量服務針對 SLO 的執行情況。SLO是產品/服務運作良好程度的目標。 SLO 是根據組織對服務的期望來設定的。 - 監控 —
使用硬體或軟體組件來觀測電腦系統的系統資源和效能 - 可觀測性(Observability) —
專注於盡可能外部化整體服務的資料,使我們能夠推斷該服務的當前狀態
SLI服務水準指標
SLI是工程師用來溝通的量化性資料,所以SLI簡單來說就是"量測"。我們在"SRE — SLO與Error Budgets"一文中有舉過一個Web Service的範例,其中提到的”Http request”就是該項服務的SLI。所以我們需要追蹤與紀錄"SLI — http request"的資料。
SLI量測
雖然許多數字都可以作為 SLI,但通常建議將 SLI 視為兩個數字的比率:
良好事件數/事件總數。以我們web service為例:
成功的http request / http request總數
許多指標通常是在伺服器端收集的,使用諸如 Prometheus之類的監控系統,或定期進行日誌分析 — — 例如,http 500 response佔所有request的一部分。
但是如果我們需要有全面的可觀測性,只在server side有SLI是不夠的。我們也需要在客戶端進行資料收集,因為不測量客戶端的行為可能會錯過一系列影響使用者但不影響伺服器端指標的問題。
SLI 量測還需要一種時間區間。 時間區間可能會有所不同,具體取決於組織和 SLO。例如依我們的web service範例,時間區間就是以月分來計。但是如果是每個月每發生幾次的event,例如銀行交易的次數。哪時間區間可能就需要用年度來計算。
SLO與SLI
我們使用監控工具持續量測 SLI,並在適當的時間內進行匯總。 我們的 SLO 是我們所期望的 — 監控 SLI 會告訴我們是否達到 SLO — 它們還會告訴我們還剩下多少Error budgets。
監控Monitoring
名詞定義:
- Telemetry遙測 —
遙測是一種高度自動化的通訊過程,透過該過程可以在遠端或無法存取的站點進行量測和收集其他資料,並將其傳輸到接收設備進行監控。 - APM(Application Performance Management) —
APM 是對軟體應用程式的效能和可用性的監視和管理。 APM 聚焦於偵測和診斷應用程式效能問題,以維持預期的服務水準。
監控的組成
核心(Core)能力:
- 儲存有關主機/服務的配置
- 分佈在多個監控事項中
- 檢查執行情況
- 結果儲存
Agents:
- 安裝在Hosts中以進行監控
- 將資訊傳回Core
UI:
- 顯示SLO與其相關SLI的儀錶板
告警:
- 向有能力做出回應的人提供適當的訊息
異常偵測:
- 根據收集的指標檢查閾值
視覺化:
- 一個時間區間的資料聚合並以適當的比例繪製圖表
以下是可以支援SLI的工具,並以監控/視覺化/日誌儲存/告警來分類
可觀測性(Observability)
在雲端運算的時代,分散式、複雜的服務是大規模運行的,使用者無法預測,吞吐量是變動的,這意味著有數百萬種不同的運作方式可能會出現問題。但我們無法預見全部的運作方式,基本上這是一種迷思。
而外部化服務的所有輸出使我們能夠推斷該服務的內部狀態,這就是可觀測性。
監控是是一種實際行為; 我們對應用程式和系統執行某些操作以確定其運行狀態。 從基本的效能測試及其是否上升或下降,到更積極呈現的服務整體檢查。 我們監控應用程式以偵測問題和異常情況。
可觀察性(是一個名詞),是系統的屬性,它是衡量系統內部狀態可以從外部輸出的知識推斷出來的程度的指標。 因此,如果 IT 系統無法充分外部化其狀態,那麼即使是最好的監控也可能無法達到要求。
為什麼可觀測性很重要?
因為單單使用監控工具對應以下狀況:
- 服務成長速度快
- 架構是動態的(隨時都在變)
- 容器工作負載
- 服務之間的依賴關係
- 更好的客戶體驗
可觀測性 = 高品質的告警
傳統上的告警通常都是低品質的,意思是這些無意義的告警無法讓我們優化我們的服務。故我們需要提高「訊號(signal)」與「雜訊(noise)」比,以便我們將告警集中在關鍵問題上。所以我們需要推斷甚麼是「正常」服務。
- 為一項服務產生一個告警(相對於一項指標)
- 使用分析來了解甚麼是服務的正常行為
- 透過多標準告警政策優化告警
可觀測性應該是
- 分佈式追蹤
- 事件日誌
- Application instrumentation
- 辨識個別使用者的體驗
- 少量的呼叫告警 — 而不是更多
- 有探索心態 — what-if question
SLO/SLI/可觀測性
SLO是從使用者的角度並協助我們辨識甚麼才是重要的。例如: 90%的使用者應該在一分鐘內完成完整的支付交易。
SLI詳細給了服務目前的表現如何。例如:一個月內98%的使用者在一分鐘內完成一筆支付交易。
可觀測性則給我們服務的正常狀態是甚麼。例如:當我們在進行監控時,使用通常都在40秒左右完成一筆支付交易。