# 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 台北時間建立*
