Files
awoooi/docs/slo/SLO-SLI-DEFINITION.md
Your Name 95110971f3
Some checks failed
CD Pipeline / tests (push) Successful in 1m27s
Code Review / ai-code-review (push) Successful in 29s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
fix(telegram): close remaining DM alert routes
2026-04-30 23:02:17 +08:00

241 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWOOOI AIOps SLO/SLI 定義文件
> **文件類型**: 服務層級目標Service Level Objectives
> **版本**: v1.0
> **建立日期**: 2026-04-14台北時間
> **建立者**: Claude Sonnet 4.6(首席架構師)+ 統帥確認
> **審查週期**: 每月第一週複查,重大事件後即時更新
> **權威性**: 本文件是 AWOOOI 系統「好不好」的唯一量尺
---
## 0. 為什麼需要 SLO
> **沒有量尺,就不知道飛輪轉得好不好。**
在自動化系統中,以下問題沒有 SLO 就無法回答:
- 「今天的自動修復成功率算好還是算差?」
- 「上週比這週好多少?」
- 「現在該出手介入了嗎?還是讓系統自己處理?」
- 「我們的 Error Budget 還剩多少?能不能再做一次有風險的部署?」
SLO 把「系統表現好壞」從**主觀感受**變成**可量化的數字**。
---
## 1. SLI 定義Service Level Indicators — 量什麼)
> SLI = 我們用來量測系統健康狀態的**指標**
### SLI-1自動修復執行成功率
```
定義: 在給定時間窗口內auto_repair 執行成功次數 / 總執行次數
計算:
分子: ApprovalRequest.execution_success = True 的筆數
分母: ApprovalRequest.execution_success IS NOT NULL 的筆數
查詢:
SELECT
COUNT(*) FILTER (WHERE execution_success = true) * 100.0 /
COUNT(*) FILTER (WHERE execution_success IS NOT NULL)
FROM approval_requests
WHERE created_at >= NOW() - INTERVAL '24 hours';
單位: 百分比(%
時間窗口: 24 小時滾動 / 7 天滾動
```
### SLI-2告警分析延遲從告警進入到 Telegram 卡片發出)
```
定義: webhook 接收告警 → Telegram 卡片成功發出的時間
計算:
開始: POST /webhooks/alerts 收到請求時間戳
結束: Telegram sendMessage API 成功回應時間戳
目前測量方式:
- Langfuse trace duration已整合
- structlog "telegram_card_sent" 與 "alertmanager_received" 的 delta
單位: 秒s
時間窗口: P50 / P95 / P99 百分位數
```
### SLI-3決策引擎可用性LLM 路徑成功率)
```
定義: LLM 分析請求中,成功返回決策的比率(含降級到 Expert System 的情況)
計算:
分子: 有 analysis_result 且 confidence > 0 的決策數
分母: 進入 LLM 分析路徑的告警總數
注意:
- LLM timeout → 降級 Expert System = 計為「成功」(有決策輸出)
- LLM 完全失敗exception= 計為「失敗」
單位: 百分比(%
```
### SLI-4KM 知識沉澱率(飛輪健康指標)
```
定義: 在執行完成的 Incident 中,成功產出 KM Entry 的比率
計算:
分子: 有對應 KM Entrycategory='execution_result' 或 'auto_repair')的 Incident 數
分母: status='resolved' 的 Incident 總數
單位: 百分比(%
時間窗口: 7 天滾動
```
### SLI-5Telegram 通知送達率
```
定義: 應發送的 Telegram 通知中,成功送達的比率
計算:
分子: structlog "telegram_card_sent" 事件數
分母: structlog "telegram_card_sent" + "telegram_send_failed" 事件數
單位: 百分比(%
```
---
## 2. SLO 目標值Service Level Objectives — 要到多好)
> SLO = 我們**承諾**系統要達到的水準
### 主要 SLO 表
| SLO ID | SLI | 及格線Minimum | 卓越線Target | 測量窗口 |
|--------|-----|-----------------|-----------------|---------|
| **SLO-1** | 自動修復執行成功率 | **≥ 70%** | ≥ 85% | 24h 滾動 |
| **SLO-2** | 告警分析延遲 P95 | **≤ 60s** | ≤ 30s | 7d 滾動 |
| **SLO-3** | 決策引擎可用性 | **≥ 95%** | ≥ 99% | 24h 滾動 |
| **SLO-4** | KM 知識沉澱率 | **≥ 60%** | ≥ 80% | 7d 滾動 |
| **SLO-5** | Telegram 通知送達率 | **≥ 98%** | ≥ 99.5% | 24h 滾動 |
### 各 SLO 設定理由
**SLO-1自動修復成功率 ≥ 70%**
目前系統基準:~0.5%ADR-073 盤點發現)。
設定 70% 為及格是因為:
- K8s 操作本身有 ~10-15% 失敗率(網路短暫不通、資源不足)
- 含重試後70% 是合理的第一個里程碑
- 卓越線 85% = 業界 AIOps 成熟系統的平均水準Google SRE 報告)
**SLO-2分析延遲 P95 ≤ 60s**
- 告警→卡片 60s 以內 = 人可接受的「準即時」反應
- P95 而非 P99 = 允許偶發的 LLM 高延遲deepseek-r1:14b 推理本身需 15-40s
- 30s 卓越線 = Playbook RAG 命中時的典型速度
**SLO-3決策引擎可用性 ≥ 95%**
- 95% = 每 20 個告警允許 1 個完全失敗Expert System 也無法決策)
- 99% 卓越線 = 幾乎零失敗,依賴 LLM 穩定性提升
**SLO-4KM 沉澱率 ≥ 60%**
- 當前基準:接近 0%BP-1 修復前 KM 幾乎不寫入)
- 60% 及格線 = 允許 40% Incident 因各種原因未能沉澱DB 失敗、無 incident_id 等)
- 80% 卓越線 = 飛輪「穩定運轉」的健康標準
**SLO-5Telegram 送達率 ≥ 98%**
- 通知是 AWOOOI 對外的唯一溝通渠道
- 98% = 每 50 個通知允許 1 個失敗(網路短暫中斷)
- 99.5% 卓越線 = 等同電信級別的高可用
---
## 3. Error Budget錯誤預算
> Error Budget = 我們「允許系統不完美」的配額
### 計算方式
```
Error Budget = 1 - SLO 目標值
以 SLO-1自動修復成功率卓越線 85%)為例:
Error Budget = 1 - 0.85 = 15%
含義:在 100 次自動修復中,允許最多 15 次失敗。
當失敗次數超過 15 次Error Budget 耗盡 → 凍結新功能部署,優先修復。
```
### Error Budget 使用規則
| 剩餘預算 | 狀態 | 允許行為 |
|---------|------|---------|
| > 50% | 🟢 充裕 | 可推高風險變更(新功能、架構調整) |
| 20-50% | 🟡 注意 | 只推低風險變更Bug Fix、配置調整 |
| 5-20% | 🟠 警戒 | 凍結所有非緊急變更,優先修復 SLO |
| < 5% | 🔴 耗盡 | 緊急模式:所有 PR 需統帥親自批准 |
---
## 4. SLO 監控與告警
### 當前監控方式
| SLO | 資料來源 | 查看位置 |
|-----|---------|---------|
| SLO-1 | PostgreSQL `approval_requests` 表 | 日度報告08:00 台北)|
| SLO-2 | Langfuse trace duration | Langfuse Dashboard |
| SLO-3 | structlog 決策成功/失敗計數 | SignOz Logs |
| SLO-4 | PostgreSQL incidents + knowledge_entries JOIN | 日度報告 |
| SLO-5 | structlog telegram_card_sent/failed | SignOz Logs |
### SLO 違規告警規則
```yaml
# 以下情況 → TYPE-8M「飛輪健康告警」→ 發 AwoooI SRE 戰情室群組
SLO-1 連續 2 小時 < 50%:
告警: "⚠️ 自動修復成功率跌破 50%,飛輪瀕死"
SLO-2 P95 連續 15 分鐘 > 120s:
告警: "⚠️ LLM 分析嚴重延遲,可能 OOM 或網路問題"
SLO-3 連續 30 分鐘 < 90%:
告警: "🔴 決策引擎大規模失敗,立即介入"
SLO-5 連續 10 分鐘 < 95%:
告警: "🔴 Telegram 送達率跌破 95%,告警鏈路中斷"
```
---
## 5. 里程碑目標(隨飛輪成熟演進)
| 時間點 | SLO-1 目標 | 備註 |
|-------|-----------|------|
| **現在2026-04-14** | 基準:~0.5% | ADR-073 盤點確認 |
| **Phase 1 完成(+2 週)** | ≥ 40% | KM 寫入、重試邏輯生效後 |
| **Phase 2 完成(+4 週)** | ≥ 70% | 告警聚合、規則覆蓋強化 |
| **Phase 3 完成(+6 週)** | ≥ 80% | 飛輪閉環、SSH KM 沉澱 |
| **成熟運轉(+3 個月)** | ≥ 85% | 達到業界 AIOps 平均水準 |
---
## 6. 本文件更新規則
1. **每週**: 日度報告自動收集 SLO-1、SLO-4 數值,存入趨勢記錄
2. **每月第一週**: 統帥 + 首席架構師 review SLO 達成情況,決定是否調整目標值
3. **重大 Incident 後**: 立即評估是否有 SLO 被違反,更新 Error Budget
4. **目標值調整**: 達到「卓越線」穩定 4 週後,將卓越線升為新的及格線
---
*最後更新: 2026-04-14 台北時間 | 建立者: Claude Sonnet 4.6 + 統帥*