3.8 KiB
3.8 KiB
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 告警閉環存在三大盲點:
- 主機層盲點(70%):所有修復動作都在 K8s 層,無法 SSH 到宿主機排查 Docker/Nginx/PM2 問題
- 情報缺乏:決策引擎只有告警標籤,無即時 Prometheus 指標輔助診斷
- 知識沉澱不完整:KM 只記錄動作,缺少「執行前情境 + 執行後驗證」三段資料
- 零寫死判斷: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}$
- TLS verify=False(self-signed), app name 白名單
sentry_provider.py:3 工具(list_issues / get_issue / search_events)- issue_id 僅允許數字
^\d{1,20}$
- issue_id 僅允許數字
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 |