87 lines
3.8 KiB
Markdown
87 lines
3.8 KiB
Markdown
# 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、參數白名單
|
||
- 支援主機:188(ollama)/ 110(wooo)/ 111(ollama)
|
||
- **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=False(self-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 Opinion(deepseek-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 enabled,2 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 |
|