Files
awoooi/docs/templates/POSTMORTEM-TEMPLATE.md
OG T 43c96890d1 docs: 新增4份治理文件 — 告警目錄/AI模型卡/事後分析模板/值班手冊
- 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>
2026-04-14 15:29:12 +08:00

229 lines
6.6 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 事後分析報告模板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、連線池滿
- [ ] 程式碼 Buglogic 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 台北時間建立*