- docs/reference/ALERT-TAXONOMY-CATALOG.md:16大類、56筆alertname、24條Rule優先順序表 - docs/ai/AI-MODEL-CARDS.md:7個AI模型治理卡(deepseek/qwen/gemini/claude/nemotron)+fallback順序 - docs/templates/POSTMORTEM-TEMPLATE.md:對齊report_generation_service,[AUTO]欄位已標記 - docs/operations/ON-CALL-HANDBOOK.md:P0/P1 SOP、Kill Switch、SLO應對、常用指令速查 建立: 2026-04-14 台北時間 Claude Sonnet 4.6(戰術B Phase 1 完整收尾) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
229 lines
6.6 KiB
Markdown
229 lines
6.6 KiB
Markdown
# AWOOOI 事後分析報告模板(Postmortem Template)
|
||
|
||
> **文件類型**: 事後分析標準模板
|
||
> **版本**: v1.0
|
||
> **建立日期**: 2026-04-14(台北時間)
|
||
> **建立者**: Claude Sonnet 4.6(首席架構師)
|
||
> **使用方式**: 複製本模板,替換 `{佔位符}` 後提交至 `docs/postmortems/YYYY-MM-DD-{alertname}.md`
|
||
> **對齊**: `report_generation_service.format_postmortem()` 自動填入欄位已標記 `[AUTO]`
|
||
|
||
---
|
||
|
||
# 事後分析:{INCIDENT_TITLE}
|
||
|
||
**Incident ID**: `{INC-YYYYMMDD-XXXXXX}`
|
||
**告警名稱**: `{alertname}`
|
||
**嚴重等級**: `{P0 / P1 / P2 / P3}`
|
||
**發生時間**: `{YYYY-MM-DD HH:MM}(台北時間)` [AUTO]
|
||
**解決時間**: `{YYYY-MM-DD HH:MM}(台北時間)` [AUTO]
|
||
**停機時長**: `{N} 分鐘` [AUTO]
|
||
**撰寫人**: `{統帥 / SRE / AI 自動生成}`
|
||
**審查日期**: `{YYYY-MM-DD}`
|
||
|
||
---
|
||
|
||
## 0. 執行摘要(Executive Summary)
|
||
|
||
> 三行以內,給不想讀全文的決策者看
|
||
|
||
- **發生了什麼**: {一句話描述事件}
|
||
- **根本原因**: {一句話描述根因}
|
||
- **最終處置**: {人工介入 / 自動修復 / 降級 / 重啟}
|
||
- **影響範圍**: {受影響服務} × {停機 N 分鐘} × {用戶影響程度}
|
||
|
||
---
|
||
|
||
## 1. 時間軸(Timeline)[AUTO from AIDecisionChain]
|
||
|
||
| 時間(台北)| 事件 |
|
||
|------------|------|
|
||
| `{HH:MM}` | Alertmanager 觸發告警:`{alertname}` |
|
||
| `{HH:MM}` | AWOOOI API 接收 webhook(`POST /webhooks/alerts`)|
|
||
| `{HH:MM}` | LLM RCA 完成,hypothesis:`{LLM假設}`,confidence:`{0.XX}` |
|
||
| `{HH:MM}` | Telegram 審核卡發出(TYPE-{1/2/3/4})|
|
||
| `{HH:MM}` | `{統帥}` 審核:`{APPROVE / REJECT / 未審核}` |
|
||
| `{HH:MM}` | 自動執行:`{kubectl command / SSH command / NO_ACTION}` |
|
||
| `{HH:MM}` | 告警解除(Alertmanager resolved)|
|
||
| `{HH:MM}` | Playbook 萃取完成,知識庫更新 |
|
||
|
||
**總耗時**: {分析延遲 Xs} + {等待審核 Xm} + {執行 Xs} = **{總計 Xm}**
|
||
|
||
---
|
||
|
||
## 2. 根本原因分析(Root Cause Analysis)[AUTO]
|
||
|
||
### 2.1 AI 假設
|
||
|
||
```
|
||
{AIDecisionChain.hypothesis 欄位內容}
|
||
```
|
||
|
||
**AI 信心度**: `{AIDecisionChain.confidence}`
|
||
**模型**: `{AIDecisionChain.model_used}`
|
||
**推理步驟**:
|
||
```
|
||
{AIDecisionChain.reasoning_steps 列表}
|
||
```
|
||
|
||
### 2.2 實際根因(人工確認)
|
||
|
||
> 填寫:AI 假設是否正確?若不正確,真正的根因是?
|
||
|
||
- **AI 假設是否正確**: `{是 / 否 / 部分正確}`
|
||
- **實際根因**: `{描述}`
|
||
- **觸發鏈**: `{A → B → C → 告警}`
|
||
|
||
### 2.3 原因分類
|
||
|
||
> 選擇適用的類別(可複選)
|
||
|
||
- [ ] 硬體問題(磁碟、記憶體、網路卡)
|
||
- [ ] 資源耗盡(磁碟滿、OOM、連線池滿)
|
||
- [ ] 程式碼 Bug(logic error、memory leak)
|
||
- [ ] 配置錯誤(YAML 錯誤、環境變數缺失)
|
||
- [ ] 依賴服務故障(外部 API、上游服務)
|
||
- [ ] 容量不足(流量峰值超出設計)
|
||
- [ ] 人為操作錯誤(誤刪、誤改)
|
||
- [ ] 告警誤報(規則設定過於敏感)
|
||
- [ ] 其他:`{描述}`
|
||
|
||
---
|
||
|
||
## 3. 影響評估(Impact Assessment)
|
||
|
||
| 維度 | 內容 |
|
||
|------|------|
|
||
| **受影響服務** | `{services}` [AUTO from `affected_services`] |
|
||
| **用戶影響** | `{無 / 部分功能降級 / 完全中斷}` |
|
||
| **停機時長** | `{N 分鐘}` [AUTO] |
|
||
| **資料影響** | `{無資料遺失 / 部分資料遺失 / 需確認}` |
|
||
| **SLO 影響** | SLO-1 成功率:`{X%}` / Error Budget 消耗:`{X%}` |
|
||
| **業務影響** | `{描述具體業務損失或用戶體驗影響}` |
|
||
|
||
---
|
||
|
||
## 4. 處置過程(Resolution)[AUTO + 人工補充]
|
||
|
||
### 4.1 自動修復
|
||
|
||
```
|
||
執行指令: {approval.action}
|
||
執行結果: {成功 / 失敗}
|
||
執行者: AIOps 自動執行
|
||
執行時間: {YYYY-MM-DD HH:MM}(台北)
|
||
```
|
||
|
||
### 4.2 人工介入
|
||
|
||
> 若有人工操作,填寫以下內容
|
||
|
||
- **操作者**: `{統帥 / SRE}`
|
||
- **操作時間**: `{YYYY-MM-DD HH:MM}(台北)`
|
||
- **執行步驟**:
|
||
```
|
||
{步驟 1}
|
||
{步驟 2}
|
||
...
|
||
```
|
||
- **為何需要人工介入**: `{AI 信心不足 / 自動修復失敗 / P0/P1 強制審核 / Kill Switch 啟動}`
|
||
|
||
### 4.3 修復驗證
|
||
|
||
- **驗證方式**: `{curl 測試 / Pod 狀態確認 / 告警解除 / 用戶確認}`
|
||
- **驗證結果**: `{服務恢復正常 / 部分恢復 / 降級運行}`
|
||
|
||
---
|
||
|
||
## 5. 飛輪學習(KM Update)[AUTO]
|
||
|
||
> 本次 Incident 是否產生了新的 Playbook?
|
||
|
||
- **Playbook 萃取**: `{是 / 否}`
|
||
- **Playbook ID**: `{PB-YYYYMMDD-XXXXXX}` [若有]
|
||
- **修復步驟**: `{動作描述}`
|
||
- **加入知識庫**: `{是 / 否(原因:{效果評分 < 3 / 統帥不建議})}`
|
||
- **知識庫查詢觸發**: `{下次同類告警將自動匹配此 Playbook}`
|
||
|
||
**效果評分**: `{1-5}` / 統帥回饋: `{如有}`
|
||
|
||
---
|
||
|
||
## 6. 預防措施(Action Items)
|
||
|
||
| # | 類型 | 描述 | 負責人 | 截止日期 | 狀態 |
|
||
|---|------|------|--------|---------|------|
|
||
| AI-1 | 監控優化 | `{告警規則閾值調整}` | `{統帥}` | `{YYYY-MM-DD}` | `{TODO}` |
|
||
| AI-2 | 系統加固 | `{修復根本原因}` | `{統帥}` | `{YYYY-MM-DD}` | `{TODO}` |
|
||
| AI-3 | 知識庫 | `{更新 Playbook / 新增規則}` | AIOps | `{自動}` | `{自動}` |
|
||
| AI-4 | 演練計畫 | `{定期演練此類故障}` | `{統帥}` | `{YYYY-MM-DD}` | `{TODO}` |
|
||
|
||
---
|
||
|
||
## 7. 五個為什麼(5 Whys)
|
||
|
||
> 用於複雜/P0 事件;追溯到技術或流程根源
|
||
|
||
1. **為什麼服務中斷?**
|
||
→ `{描述直接原因}`
|
||
|
||
2. **為什麼 `{直接原因}` 發生?**
|
||
→ `{描述次級原因}`
|
||
|
||
3. **為什麼 `{次級原因}` 沒有被預防?**
|
||
→ `{描述`}
|
||
|
||
4. **為什麼 `{原因3}` 存在?**
|
||
→ `{描述}`
|
||
|
||
5. **為什麼 `{原因4}` 沒有在系統設計中被考慮?**
|
||
→ `{根本原因 — 技術債 / 流程缺失 / 資源不足}`
|
||
|
||
**根本改善方向**: `{描述}`
|
||
|
||
---
|
||
|
||
## 8. 附件(Appendix)
|
||
|
||
### 8.1 相關 Logs
|
||
|
||
```
|
||
# 關鍵錯誤日誌(僅附最相關的 5-10 行)
|
||
{log lines}
|
||
```
|
||
|
||
### 8.2 相關截圖
|
||
|
||
> 附 Grafana / SignOz / Telegram 截圖路徑
|
||
|
||
- `docs/postmortems/assets/{INC-ID}-grafana.png`
|
||
- `docs/postmortems/assets/{INC-ID}-telegram.png`
|
||
|
||
### 8.3 參考資料
|
||
|
||
- Incident DB: `SELECT * FROM incidents WHERE incident_id = '{INC-ID}'`
|
||
- Langfuse Trace: `https://langfuse.awoooi.internal/trace/{trace_id}`
|
||
- 相關 ADR: `{ADR-XXX}`
|
||
- 相關 Playbook: `{PB-ID}`
|
||
|
||
---
|
||
|
||
## 使用說明
|
||
|
||
**何時填寫**: P0/P1 事件 24 小時內;P2 事件 72 小時內;P3 可選
|
||
|
||
**自動填入欄位 [AUTO]**: 由 `report_generation_service.format_postmortem()` 自動填入,人工只需補充 2.2、4.2、5、6
|
||
|
||
**存放位置**:
|
||
```
|
||
docs/postmortems/
|
||
YYYY-MM-DD-{alertname}-{incident_id}.md
|
||
assets/
|
||
{incident_id}-*.png
|
||
```
|
||
|
||
**提交方式**: `git push gitea main` → 自動部署
|
||
|
||
---
|
||
|
||
*本模板由 Claude Sonnet 4.6 於 2026-04-14 台北時間建立*
|