Files
ewoooc/docs/adr/ADR-013-aiops-autoheal.md
ogt 77d3a1da48
Some checks failed
CD Pipeline / deploy (push) Failing after 3m24s
feat(ai-ops): ADR-013 AIOps 自動修復閉環完整實作
架構(Exception → Incident → PlayBook → Heal → KM → Telegram):

新增元件:
- database/autoheal_models.py: Incident/Playbook/HealLog 三張表 + 7 條種子 PlayBook
- migrations/013_autoheal.sql: 建表 DDL + 種子資料(冪等 INSERT)
- services/auto_heal_service.py: 核心引擎 7 步閉環
  - _classify_error: 8 類錯誤自動分類 (DNS_FAIL/DB_UNREACHABLE/OOM/...)
  - _match_playbook: error_type + keyword + 冷卻 + max_retries 保護
  - _execute_playbook: DOCKER_RESTART/SSH_CMD/ALERT_ONLY/WAIT_RETRY
  - _sink_to_km: 修復知識寫入 ai_insights (auto_heal_playbook)
  - SSH 白名單:僅允許 docker restart / compose restart / docker start

修改元件:
- database/manager.py: _init_autoheal_tables() 啟動時建表+種子 PlayBook
- scheduler.py: 3 個核心任務植入 handle_exception
  (run_auto_import_task / run_icaim_analysis_task / run_weekly_strategy_task)
- requirements.txt: paramiko(SSH 跳板;不可用時降級 subprocess+CLI ssh)

安全設計: CMD 白名單 + cooldown + max_retries escalation + DB 冪等 migration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 16:03:49 +08:00

2.4 KiB
Raw Blame History

ADR-013: AIOps 自動修復閉環架構

狀態: Accepted
日期: 2026-04-19
提案者: Antigravity


背景與問題

EwoooC 系統已有 L1 Hermes 告警派發,但告警只能「通知」,無法「自癒」。 當 psycopg2.OperationalError: could not translate host name "momo-postgres" 這類明確的基礎設施問題發生時,仍需人工 SSH 登入修復,缺乏自動化閉環。


決策

建立三層 AIOps 閉環架構:

Exception → Incident(DB) → PlayBook 匹配 → Auto-Heal 執行 → HealLog(DB) → KM 沉澱(ai_insights) → Telegram 通知

新增元件

元件 類型 說明
database/autoheal_models.py Model Incident / Playbook / HealLog 三張表
migrations/013_autoheal.sql Migration 建表 + 種子 PlayBook 植入
services/auto_heal_service.py Service 核心引擎(分類、匹配、執行、沉澱)
database/manager.py 修改 加入 _init_autoheal_tables()
scheduler.py 修改 三個核心任務植入 handle_exception
requirements.txt 修改 加入 paramiko

PlayBook 動作類型

action_type 說明
DOCKER_RESTART 透過 SSH 跳板 restart 指定容器
SSH_CMD 執行白名單內的任意 SSH 指令
ALERT_ONLY 僅發 Telegram 告警,人工介入
WAIT_RETRY 紀錄後等待排程重試

安全設計

  • SSH 指令白名單:僅允許 docker restart *, docker compose restart *, docker start *
  • 冷卻機制:同 PlayBook 在 cooldown_min 內不重複觸發
  • 升級機制:達到 max_retries 後 incident.status = escalated 並通知人工

KM 沉澱格式

每次修復後寫入 ai_insights

  • insight_type = "auto_heal_playbook"
  • 包含事件、症狀、行動、結果、教訓五要素
  • 自動排入 embedding_retry_queue 完成 RAG 向量化

取捨

優先使用 paramiko 而非 subprocess + CLI ssh原因是在容器內環境控制更精準且支援跳板機 ProxyJump。若 paramiko 未安裝則自動降級到 CLI ssh向後相容


結果

  • P1/P2 等級的 DB_UNREACHABLE / DNS_FAIL 類問題可在 30 秒內完成自動修復
  • 所有修復知識自動沉澱至 RAG KM提升未來 AI 的判斷品質
  • 覆蓋任務:run_auto_import_task / run_icaim_analysis_task / run_weekly_strategy_task