# ADR-090: 監控盲區治理 + 資產盤點 × 7 項自動化覆蓋矩陣永久化 DB

**日期**: 2026-04-18
**狀態**: 提案（Schema 定稿，Migration 待執行）
**上游**: [ADR-080 AI 自主化飛輪總覽](./ADR-080-ai-autonomy-flywheel-overview.md)、[2026-04-15 MASTER 藍圖](../superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md)
**完整實施計畫**: [2026-04-18 盲區治理 + 容量自主化戰役](../superpowers/specs/2026-04-18-blindspot-governance-capacity-l4.md)

## Context（背景）

2026-04-18 MoWoooWorkDown 假警報 RCA 暴露三重結構性失守：

1. **監控覆蓋不到三成** — Prometheus 僅 35 active targets / 58 alert rules，對照實際資產（主機、K3s workloads、40+ Sentry 容器、18 個 188 容器、Kafka、ClickHouse、Ollama GPU、120/121 K3s Masters、多個網站）嚴重不足
2. **告警規則量錯維度** — `HostHighCpuLoad` 用 CPU idle% 測，結果 110 load=18.35 / 188 load=16.32 持續 13 天無觸發；cadvisor 狂吃 288% CPU 13 天無告警
3. **MD/ADR/Memory 無強制力** — 過去寫了一堆治理文件，執行上仍持續偏移，因為沒有資料庫級的強制檢查

MASTER Phase 0-6 的飛輪代碼全綠，但**在生產上沒真轉**：Playbook trust 實際動過幾次？MCP 24h 真 >500 嗎？RESTART 佔比真從 68% 降到 <40% 嗎？全部沒量過。

## Decision（決策）

建立 **11 張表的資產盤點 + 自動化覆蓋 + AI 協作稽核資料庫地基**，把治理從 Markdown 搬進 PostgreSQL，讓 AI 四分工（OpenClaw × NemoTron × Hermes × Claude LLM）在結構化資料上做決策，且每次動作必留 trail。

### 11 張表總覽

| # | 表 | 用途 | 主寫者 |
|---|---|------|-------|
| 1 | `asset_inventory` | 全景資產主表（主機/容器/K8s/DB/網站/API/套件…） | scanner + NemoTron |
| 2 | `asset_discovery_run` | 每次盤點 header | cron / ai / human |
| 3 | `asset_coverage_snapshot` | 資產 × 7 自動化 覆蓋矩陣 | scanner + OpenClaw |
| 4 | `asset_relationship` | 資產依賴圖（爆炸半徑） | OpenClaw |
| 5 | `alert_rule_catalog` | 告警規則本身即資產 | human + Hermes |
| 6 | `asset_change_event` | 資產變化追蹤 | scanner diff |
| 7 | `asset_compliance_snapshot` | SSL / CVE / secret / backup 合規 | scanner |
| 8 | `host_capacity_snapshot` | 主機容量快照（每日 02:00） | **NemoTron** 🔴 |
| 9 | `capacity_violation_event` | 配額違規 | 自動 |
| 10 | `automation_operation_log` | **所有 AI 自動化動作稽核主表** | 全 Agent |
| 11 | `ai_collaboration_trace` | 多 Agent 協作逐步（辯證歷程） | 全 Agent |

### 七大自動化引擎對映

每個資產在 `asset_coverage_snapshot.dimension` 有七格：
- `auto_monitoring` — Prom/Log/Metric 有抓嗎
- `auto_alerting` — 有對應 alert rule 嗎
- `auto_rule_creation` — 規則是人寫還是 AI 產
- `auto_rule_matching` — 告警來時 rule 有自動匹配嗎
- `auto_playbook` — 有對應 Playbook 嗎
- `auto_remediation` — 有自動修復能力嗎
- `auto_km_creation` — 故障後自動進 KM 嗎

### AI 四分工責任矩陣

| 引擎 | 主責 | 輔責 |
|-----|-----|------|
| E1 自動監控 | **NemoTron** 每日容量巡檢 | Hermes 趨勢 |
| E2 自動告警 | **OpenClaw** 分類分診 | Critic 挑戰 |
| E3 自動建規則 | **Hermes** 分析師 | NemoTron 提案 |
| E4 自動匹配 | **OpenClaw** embedding 檢索 | NemoTron 排序 |
| E5 自動 Playbook | **NemoTron + Solver** | Reviewer |
| E6 自動修復 | **Coordinator** + Critic + Verifier | stderr 回灌 |
| E7 自動 KM | **Hermes** 敘事 | OpenClaw 摘要 |

## Alternatives Considered（考慮過的替代）

| 方案 | 為何否決 |
|-----|---------|
| A. 只改 alert_rules.yaml 補規則 | 治標不治本，無法追蹤「為何加/何時 retire」 |
| B. 用 Grafana / Datadog 外部 SaaS | 不符合自託管偏好 + 歷程不進自家 DB |
| C. 6 張表版（未加 relationship/alert_rule_catalog/compliance/capacity） | 爆炸半徑算不出、規則無演化記錄、配額違規無稽核 |
| D. 用既有 incidents / knowledge_entries 湊合 | 這兩表是事件層，不是資產層，硬塞會搞垮 schema |

## Consequences（後果）

### Positive

- **治理從 MD 升級為 DB 強制**：Gitea CI 可 query DB 做 PR reject
- **AI 可跨資產做決策**：NemoTron 看 `host_capacity_snapshot` 自主提搬遷建議
- **所有 AI 動作有稽核**：`automation_operation_log` + `ai_collaboration_trace` 形成完整 fine-tune 訓料
- **盲區可量化**：`asset_coverage_snapshot.coverage_status='red'` COUNT 即覆蓋率 SLO
- **規則可演化**：`alert_rule_catalog.noise_rate` + `superseded_by_rule_id` 支援 AI 漸進取代硬編規則

### Negative

- **11 張表 + 多 FK 增加 Migration 複雜度**（但分批回滾可行）
- **PostgreSQL 188 寫入量提升**（現有低寫入，加這些每日寫 <10k 行，可忽略）
- **Scanner 須寫新腳本**（`apps/api/scripts/audit_assets_v1.py`）
- **現有 25 條 alert_rules.yaml 須 seed 進 alert_rule_catalog**（一次性，~1 小時）

### Rollback

- 每張表獨立 migration，可 `alembic downgrade -1` 一張張退
- Feature flag `AIOPS_ASSET_INVENTORY_ENABLED` 預設 false，分階段開啟

## Implementation（施工）

詳見 [2026-04-18 盲區治理 + 容量自主化戰役](../superpowers/specs/2026-04-18-blindspot-governance-capacity-l4.md) §5 完整 DDL、§7 七階段實施步驟、§10 驗收指標。

## Related

- ADR-080 AI 自主化飛輪總覽
- ADR-082 多 Agent 協作
- ADR-083 學習閉環
- ADR-084 異常偵測（trend_predictor）
- ADR-086 修復抽象化（blast_radius_calculator）
- MASTER §3.1 D1 感官縱深（MCP Tool Registry）
- MASTER §4 7 層 × 6 維矩陣
