Some checks failed
CD Pipeline / deploy (push) Failing after 3m24s
架構(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>
2.4 KiB
2.4 KiB
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