- ADR-070: 全自動 AIOps 閉環 MCP Phase 1-4 決策文件 - ADR-071: 告警通知四類型 + KM 三段資料閉環決策文件 - docs/runbooks/ssh-mcp-setup.md: SSH MCP 建立/驗證/輪換 SOP - Skill-04: v2.7 新增 Sprint C DR + ADR-070 MCP 10 providers 完整記錄 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.2 KiB
3.2 KiB
ADR-071: 告警通知四類型架構 + KM 三段資料閉環
狀態: Accepted
日期: 2026-04-11 (台北時間)
作者: Claude Sonnet 4.6 + 首席架構師審查
關聯: ADR-070(MCP 閉環)、ADR-068(飛輪冷啟動)
問題
AWOOOI Telegram 通知系統存在以下問題:
- 所有告警統一用同一種卡片格式,資訊密度過高或過低
incidents表缺少 metrics_before / metrics_after / k8s_state_after 欄位,無法做效果驗證- KM 知識沉澱缺少「執行前情境」,Playbook 無法學習「什麼情況下採用這個動作」
- Drift 告警(Config 漂移)與一般服務告警混用同一卡片,語意不清
決定
四種通知類型
| Type | 名稱 | 觸發條件 | 特徵 |
|---|---|---|---|
| TYPE-1 | 純資訊 | 非嚴重告警(Info/heartbeat) | 無按鈕,文字摘要 |
| TYPE-2 | 指標快照 | metrics_before 有數據 | 顯示 CPU/Mem/Disk 快照 |
| TYPE-3 | 人工審核 | needs_approval=True | Y/n 審核按鈕 |
| TYPE-4 | 自動修復結果 | auto_execute 完成 | 顯示執行結果 + metrics delta |
| TYPE-4D | Drift 告警 | alert_category=config_drift | Diff 截斷顯示 |
七種 alert_category 動態按鈕(TYPE-3 審核卡片)
service_down / high_resource / config_drift /
security_event / performance / data_issue / unknown
DB Schema 變更(Migration: phase30_alert_types.sql)
新增欄位至 incidents 表:
alert_category VARCHAR(50)
needs_approval BOOLEAN DEFAULT false
metrics_before JSONB
metrics_after JSONB
k8s_state_after TEXT
resolution_time_sec INTEGER
notification_type VARCHAR(20)
signal_source VARCHAR(50)
新增 Enum:AlertCategory, NotificationType
KM 三段資料格式(km_conversion_service.py)
## 效果驗證
- 指標變化: CPU 85%→12% | Mem 90%→45% | 重啟 3→0
- 恢復耗時: 47秒
- K8s 狀態: 2/2 Running
實作記錄
| 子任務 | Commit | 說明 |
|---|---|---|
| A — DB Migration | 325b385 |
incidents 8 欄位 + 5 PgEnum,Production 已執行 |
| B — classify_notification() | 325b385 |
五型分類器 |
| C — send_info_notification() | 325b385 |
TYPE-1 純資訊卡片 |
| D — 狀態機守衛 | 325b385 |
_check_incident_state_guard() RESOLVED 防誤點 |
| E — _build_inline_keyboard() | 325b385 |
7 種 alert_category 動態按鈕 |
| F — send_drift_card() | 325b385 |
TYPE-4D Drift Diff 截斷 |
| G — km_conversion_service | 325b385 |
Incident→KM 自動轉換 |
| H — handle_manual_fix_done() | 325b385 |
TYPE-4 手動修復 Bot 對話閉環 |
| I — metrics_before 閉環 | 1ec1965 |
_fetch_metrics_snapshot() + DB 寫入 |
| J — KM delta 格式 | 1ec1965 |
_build_content() 精簡 delta + k8s_state_after |
後果
正面
- 告警卡片語意清晰,操作員看一眼就知道需要做什麼
- KM 三段資料完整,飛輪可學習「在什麼情況下這個修復有效」
- Drift 告警獨立類型,避免和服務告警混淆
風險
- alert_category 分類依賴 LLM 判斷 →
unknownfallback 保底 - metrics_before 在 execute 前抓取,若 execute 很快可能抓到 post-action 數據 → 可接受(誤差小)