Files
awoooi/docs/adr/ADR-070-aiops-full-automation-loop.md
2026-04-12 00:09:18 +08:00

87 lines
3.8 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.
# ADR-070: 全自動 AIOps 閉環 — MCP Phase 1-4
**狀態**: Accepted
**日期**: 2026-04-11 (台北時間)
**作者**: Claude Sonnet 4.6 + 首席架構師審查
**關聯**: `docs/superpowers/specs/2026-04-10-infra-rebuild-sprint-abc-design.md` § 14
---
## 問題
AWOOOI AIOps 告警閉環存在三大盲點:
1. **主機層盲點70%**:所有修復動作都在 K8s 層,無法 SSH 到宿主機排查 Docker/Nginx/PM2 問題
2. **情報缺乏**:決策引擎只有告警標籤,無即時 Prometheus 指標輔助診斷
3. **知識沉澱不完整**KM 只記錄動作,缺少「執行前情境 + 執行後驗證」三段資料
4. **零寫死判斷**symptom_pattern 應由 AI 動態生成,不應硬編碼
---
## 決定
採用 **MCP Provider 架構**(四個 Phase 遞進實作):
### MCP Phase 1 — K8s MCP 強化
新增 6 個 K8s 工具:`pod_logs`, `watch_rollout`, `get_events`, `describe_resource`, `get_hpa`, `get_node_status`
### MCP Phase 2 — 主機層 + 情報收集
- **Phase 2a** `ssh_provider.py`15 工具,群組 A 診斷9 工具)+ 群組 B 操作6 工具)
- 四層守衛SSH 連線池、asyncssh、already-known-hosts、參數白名單
- 支援主機188ollama/ 110wooo/ 111ollama
- **Phase 2b** `prometheus_provider.py`3 工具query / range / alert_history
### MCP Phase 3 — GitOps + 錯誤追蹤
- `argocd_provider.py`3 工具list_apps / get_app_status / get_sync_history
- TLS verify=Falseself-signed, app name 白名單 `^[a-zA-Z0-9][a-zA-Z0-9._-]{0,62}$`
- `sentry_provider.py`3 工具list_issues / get_issue / search_events
- issue_id 僅允許數字 `^\d{1,20}$`
### MCP Phase 4 — NemoClaw 整合 + KM 三段資料
**Phase 4a** — NemoClaw Second Opiniondeepseek-r1:14b
- 觸發條件:`confidence < 0.7`
- 呼叫 Ollama 188:11434解析 `<think>...</think>` CoT
- 結果寫入 `proposal_data["advisory_note"]`,由 Telegram 推送
**Phase 4b** — K8s 狀態後驗證:
- 自動修復完成後呼叫 `K8sProvider.kubectl_get(pods)`
- 寫入 `incidents.k8s_state_after`
**Phase 4c** — AI 動態 Playbook 草稿:
- 新 alertname 首次出現時,`qwen2.5:7b-instruct` 生成 5 段結構化草稿
- 去重semantic_search threshold=0.92(避免重複沉澱)
- 狀態標記 DRAFT人工審核後升為 APPROVED
---
## 後果
### 正面
- 主機層告警可自動修復Nginx down / Docker 容器異常 / 磁碟滿)
- KM 三段資料完整(執行前指標 + 動作 + 執行後 K8s 狀態)
- 新告警 AI 自動生成 Playbook 草稿,飛輪冷啟動速度提升
### 風險
- SSH 工具有命令注入風險 → 四層白名單守衛緩解
- NemoClaw 呼叫增加 Ollama 負載 → 僅在信心 < 0.7 觸發,非必經路徑
- Playbook 草稿品質依賴 qwen2.5:7b → DRAFT 狀態人工審核把關
---
## 實作記錄
| Phase | Commit | 檔案 |
|-------|--------|------|
| MCP Phase 1 | a29e5e1 | `k8s_provider.py` +6 工具 |
| MCP Phase 2a | 6351e9a | `ssh_provider.py` 15 工具 |
| MCP Phase 2b | 6351e9a | `prometheus_provider.py` 3 工具 |
| MCP Phase 3 | a2cc985 | `argocd_provider.py` + `sentry_provider.py` |
| MCP Phase 4a | f3ee577 | `decision_manager._nemoclaw_second_opinion()` |
| MCP Phase 4b | 0fa3b35 | `decision_manager._push_auto_repair_result()` k8s_state_after |
| MCP Phase 4c | 7eb49f9 | `decision_manager._generate_playbook_draft_if_new()` |
| providers 全註冊 | a2cc985 | `providers/__init__.py` 10 providers |
| 生產驗收 | 2026-04-11 | 10 providers enabled2 pods Running |
| 全自動化三大修復 | c439277 | `auto_approve.py` high risk 全開放 + DESTRUCTIVE_PATTERNS`decision_manager._collect_mcp_context()` MCP 前置收集;`webhooks.py` target_resource 修正 |
| Tier 3 CR 修補 | 8be87b0 | C1 ternary bug / C2 timeout / C3 DESTRUCTIVE_PATTERNS 補全 / I1 RFC-1918 / I4 25 tests |