654 lines
24 KiB
Markdown
654 lines
24 KiB
Markdown
# AWOOOI 監控機制完整規劃:讓監控成為 AI 智慧的感知神經,而非束縛
|
||
|
||
> **文件類型**: 架構設計 + 實施 RunBook
|
||
> **優先級**: 🔴 重中之重
|
||
> **建立**: 2026-03-29 12:38 (台北)
|
||
> **建立者**: Antigravity
|
||
> **核心命題**: 監控不是目的,而是 AI 決策的神經末梢。
|
||
|
||
---
|
||
|
||
## 一、核心哲學:監控與 AI 的關係定位
|
||
|
||
### 1.1 「不能淪為監控產品」— 這個恐懼從哪裡來?
|
||
|
||
傳統監控產品(Grafana / Prometheus / Datadog)的底層邏輯是:
|
||
> 「系統把原始數據攤開,**人類**負責看懂並做決定。」
|
||
|
||
這讓使用者變成**數據的搬運工**,而非**決策者**。
|
||
|
||
AWOOOI 的定位必須是:
|
||
> 「AI 消化所有數據,**主動帶著分析結論來問統帥**:『這裡我建議這樣做,您核准嗎?』」
|
||
|
||
---
|
||
|
||
### 1.2 黃金法則:哪些監控數據「應該消失在後台」,哪些「必須浮現到前台」
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────────────┐
|
||
│ 監控資訊的兩個命運 │
|
||
├───────────────────────────┬────────────────────────────────────────────┤
|
||
│ 🔒 靜默消化(後台進行) │ 🚨 主動浮現(推送給統帥) │
|
||
├───────────────────────────┼────────────────────────────────────────────┤
|
||
│ Prometheus Metrics 原始值 │ AI 判斷「這是異常」後產生的 Approval 卡片 │
|
||
│ SigNoz Trace 詳情 │ Anomaly Counter 升級到 ESCALATE 時的警示 │
|
||
│ Sentry Error Log 完整堆疊 │ Auto-Repair 執行後的結果摘要 │
|
||
│ Grafana 儀表板圖表 │ P0 事件的緊急插隊(Priority Preemption) │
|
||
│ Alertmanager 規則配置 │ 每日 AI 健康摘要(主動推送) │
|
||
│ K8s Pod 狀態明細 │ FinOps 成本異常告警 │
|
||
└───────────────────────────┴────────────────────────────────────────────┘
|
||
```
|
||
|
||
**核心結論**:監控數據 99% 應該「靜默消化」,只有 AI 無法自動處理的 1% 才浮現為「需要統帥決策的卡片」。
|
||
|
||
---
|
||
|
||
## 二、監控完整節點盤點(現況 vs 目標)
|
||
|
||
### 2.1 五層監控架構
|
||
|
||
```
|
||
Layer 0: 物理感知層(主機/節點)
|
||
↓
|
||
Layer 1: 服務感知層(容器/Pod)
|
||
↓
|
||
Layer 2: 應用感知層(API/前端/Worker)
|
||
↓
|
||
Layer 3: AI 智慧層(LLM 推理/工具調用)
|
||
↓
|
||
Layer 4: 業務感知層(用戶行為/成本/SLO)
|
||
```
|
||
|
||
---
|
||
|
||
### 2.2 各層完整節點盤點
|
||
|
||
#### Layer 0: 物理感知層
|
||
|
||
| 節點 | 工具 | 數據 | 現況 | 缺口 |
|
||
|------|------|------|------|------|
|
||
| .110 CPU/Memory/Disk | Node Exporter | 系統指標 | ✅ Prometheus | — |
|
||
| .112 CPU/Memory/Disk | Node Exporter | 系統指標 | 🟡 孤立,無 Webhook | 無告警整合 |
|
||
| .188 CPU/Memory/Disk | Node Exporter | 系統指標 + GPU | ✅ Prometheus | — |
|
||
| .120 K3s Master | Node Exporter + kube-state | K3s 節點指標 | ✅ | — |
|
||
| .121 K3s Worker | Node Exporter + kube-state | K3s 節點指標 | ✅ | — |
|
||
| VIP .125 | Blackbox Exporter | TCP 健康 | ✅ 已配置 | — |
|
||
|
||
#### Layer 1: 服務感知層(Docker/K8s)
|
||
|
||
| 服務 | Prometheus | Sentry | OTEL | 告警 | 自動修復 | 缺口 |
|
||
|------|-----------|-------|------|------|---------|------|
|
||
| awoooi-api | ✅ | ✅ | ✅ | ✅ 完整 | ✅ | — |
|
||
| awoooi-web | ✅ | ✅ | ✅ | ✅ 完整 | ✅ | — |
|
||
| awoooi-worker | ✅ | ✅ | ✅ | 🟡 | ✅ | HPA 缺失 |
|
||
| Ollama | ✅ | — | — | ✅ | ✅ 重啟 | — |
|
||
| OpenClaw | ✅ | ✅ | ✅ | ✅ | ✅ 重啟 | — |
|
||
| Redis | ✅ | — | — | ✅ | ❌(謹慎) | 自動修復 too conservative |
|
||
| PostgreSQL | ✅ | — | — | ✅ | ❌(謹慎) | 同上 |
|
||
| Harbor | ✅ | — | — | ✅ | — | — |
|
||
| Sentry | ✅ | — | — | ✅ | — | — |
|
||
| Langfuse | ✅ | — | — | ✅ | — | — |
|
||
| **MinIO** | ❌ | — | — | ❌ | ❌ | 完全未監控 |
|
||
| **Kali Scanner** | ❌ | — | — | ❌ | ❌ | 孤立節點 |
|
||
|
||
#### Layer 2: 應用感知層
|
||
|
||
| 數據類型 | 工具 | 現況 | 缺口 |
|
||
|---------|------|------|------|
|
||
| API Error Rate | Prometheus + SigNoz | ✅ | — |
|
||
| API Latency P50/P95/P99 | SigNoz OTEL | ✅ | — |
|
||
| Distributed Traces | SigNoz | ✅ | — |
|
||
| Frontend Web Vitals (LCP/FID/CLS) | Sentry | ✅ | — |
|
||
| Frontend JS Errors | Sentry | ✅ | — |
|
||
| Frontend Session Replay | Sentry | ✅ | — |
|
||
| **Frontend Rage Click** | Sentry | ✅ | **未整合進 AI 分析** |
|
||
| **API Slow Query** | Sentry + structlog | ✅ | **無 AI 自動優化建議** |
|
||
| **K8s Resource Quota** | kube-state-metrics | ✅ | — |
|
||
| Alert Chain E2E | Prometheus Counter | ✅ ADR-037 | — |
|
||
|
||
#### Layer 3: AI 智慧層
|
||
|
||
| 數據類型 | 工具 | 現況 | 缺口 |
|
||
|---------|------|------|------|
|
||
| LLM 請求/回應 Traces | Langfuse | ✅ | — |
|
||
| LLM Token 用量/成本 | Langfuse | ✅ | **無 AWOOOI Dashboard** |
|
||
| Ollama 推理延遲 | Prometheus | ✅ | — |
|
||
| AI Fallback 觸發次數 | Prometheus | ✅(ADR-006)| — |
|
||
| NVIDIA Circuit Breaker | Prometheus | ✅(ADR-036)| — |
|
||
| **AI 自治率指數** | — | ❌ 完全缺失 | 核心指標未建立 |
|
||
| **Anomaly Counter 統計** | Redis 計數器 | ✅ ADR-037 | **無前端展示** |
|
||
| **Approval 決策分析** | PostgreSQL | ✅ | **只有原始 CRUD,無分析** |
|
||
|
||
#### Layer 4: 業務感知層
|
||
|
||
| 數據類型 | 工具 | 現況 | 缺口 |
|
||
|---------|------|------|------|
|
||
| SLO 達成率 | Prometheus + rules | ✅ 定義 | **無可視化** |
|
||
| 事件 MTTR(平均修復時間)| PostgreSQL | ✅ 原始資料 | **無計算與展示** |
|
||
| **FinOps 成本追蹤** | cost_analyzer.py | ✅ 邏輯 | **無 UI,完全閒置** |
|
||
| **用戶操作審計** | audit_logs.py | ✅ | — |
|
||
| **知識庫查詢統計** | — | ❌ | 無知識庫後端 |
|
||
|
||
---
|
||
|
||
## 三、整合缺口分析
|
||
|
||
### 3.1 「最後一哩路」缺口(已有工具,未整合)
|
||
|
||
| 缺口 | 工具已準備 | 缺什麼 | 工時 |
|
||
|------|-----------|-------|------|
|
||
| MinIO 監控 | Prometheus | MinIO Exporter 未部署 | 1h |
|
||
| Kali 安全掃描 | Nmap/ZAP on .112 | 無 AWOOOI Webhook 整合 | 2h |
|
||
| FinOps 前端 | cost_analyzer.py | 無 API 端點 + 無 UI | 8h |
|
||
| AI 自治率指數 | Prometheus Counter 可建 | 指標定義 + Dashboard | 4h |
|
||
| Rage Click → AI 分析 | Sentry `get_ux_audit_summary()` | 無觸發器,未週期調用 | 2h |
|
||
| Anomaly Counter 前端展示 | Redis + anomaly_counter.py | 無 GenUI 卡片 | 4h |
|
||
| SLO 可視化 | Prometheus rules 已定義 | 無 Grafana/前端展示 | 3h |
|
||
| MTTR 計算 | PostgreSQL 有 incidents 資料 | 無計算 API 端點 | 2h |
|
||
| 雙 Prometheus 聯邦 | 188/110 各一個 | 無 Federation 配置 | 2h |
|
||
|
||
**整合缺口總工時估算:~28 小時**
|
||
|
||
---
|
||
|
||
## 四、監控 UI 呈現戰略(避免淪為監控產品的核心設計)
|
||
|
||
### 4.1 三種監控 UI 反模式(絕對禁止)
|
||
|
||
```
|
||
❌ 反模式 A:Grafana 嵌入 iframe
|
||
→ 整個頁面都是 Grafana,用戶感覺在用 Grafana
|
||
|
||
❌ 反模式 B:「監控頁面」頂級選單項目
|
||
→ 將 AWOOOI 降格為「有 AI 輔助的 Grafana」
|
||
|
||
❌ 反模式 C:Prometheus 原始指標直接展示
|
||
→ 用戶看到 rate(http_requests_total[5m]) 這種語法,違反 AI 原生體驗
|
||
```
|
||
|
||
### 4.2 正確的監控 UI 架構:「三義分離原則」
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ AWOOOI 監控 UI 三義分離 │
|
||
├────────────────────┬──────────────────┬─────────────────────────────┤
|
||
│ 義 1: AI 主動浮現 │ 義 2: 問即答 │ 義 3: 深度調查跳脫 │
|
||
│ (AWOOOI 前端) │ (Omni-Terminal) │ (外部工具直連) │
|
||
├────────────────────┼──────────────────┼─────────────────────────────┤
|
||
│ Nexus 頁面 │ /status awoooi-api│ 🔗 Grafana (新分頁) │
|
||
│ → AI 健康脈搏 │ → GenUI 健康卡 │ 🔗 SigNoz (新分頁) │
|
||
│ → 自治率指數 │ /cost this-month │ 🔗 Sentry (新分頁) │
|
||
│ → 異常趨勢圖 │ → FinOps 成本卡 │ │
|
||
│ War Room 頁面 │ /trace xxx │ 不直接嵌入,保持 AWOOOI │
|
||
│ → 待決策 Approval │ → Trace 彙整卡 │ 界面純淨性 │
|
||
└────────────────────┴──────────────────┴─────────────────────────────┘
|
||
```
|
||
|
||
### 4.3 Nexus 頁面的監控呈現規格
|
||
|
||
這是首頁(The Nexus / 全局心智樞紐),呈現監控摘要的唯一入口:
|
||
|
||
```tsx
|
||
// Nexus 頁面結構(Nothing.tech 純白工業風)
|
||
|
||
// 區塊 A:AI 自治率指數(最大最重要)
|
||
<AutonomyIndexPanel>
|
||
今日 AI 成功攔截並自動修復:7/10 事件(70% 自治率)
|
||
↗ 比昨日提升 12%
|
||
</AutonomyIndexPanel>
|
||
|
||
// 區塊 B:系統脈搏(3 個數字,非圖表)
|
||
<SystemPulseRow>
|
||
<PulseMetric label="正常服務" value="24/25" status="healthy" />
|
||
<PulseMetric label="活躍告警" value="0" status="healthy" />
|
||
<PulseMetric label="待決策" value="2" status="warning" />
|
||
</SystemPulseRow>
|
||
|
||
// 區塊 C:AI 思考流(背景動態,非重點)
|
||
<ThinkingStream>
|
||
[Investigator] Redis latency: 2ms ... OK
|
||
[Investigator] API error rate: 0.1% ... OK
|
||
[Investigator] cert://*.wooo.work: 42 days ... OK
|
||
</ThinkingStream>
|
||
|
||
// 區塊 D:需要統帥決策的卡片(只有這個需要互動)
|
||
// → 有待決策才出現,平時此區域「靜默」
|
||
<DecisionZone>
|
||
<ApprovalCard urgency="CRITICAL" ... />
|
||
</DecisionZone>
|
||
```
|
||
|
||
---
|
||
|
||
### 4.4 監控數據在 Omni-Terminal 的呈現(問即答模式)
|
||
|
||
Terminal 輸入 → AI 消化原始指標 → 回傳 GenUI 卡片(非原始數字)
|
||
|
||
| 使用者輸入 | AI 行為 | GenUI 卡片類型 |
|
||
|---------|---------|--------------|
|
||
| `/status all` | 查詢所有服務健康 | `SystemHealthCard` |
|
||
| `/status awoooi-api` | 查 API P95 延遲 + 錯誤率 | `ServiceDetailCard` |
|
||
| `/cost` | 呼叫 cost_analyzer.py | `FinOpsCard` |
|
||
| `/trace 最近5分鐘` | 查詢 SigNoz slow traces | `TraceListCard` |
|
||
| `/incident 今天` | 查詢今日事件 + AI 摘要 | `IncidentSummaryCard` |
|
||
| `/alert 狀態` | 檢查告警鏈路 E2E | `AlertChainStatusCard` |
|
||
| `/slo` | 計算 API/Web SLO 達成率 | `SLODashboardCard` |
|
||
|
||
**🎯 這才是 AI 原生體驗**:使用者永遠都在跟 AI 對話,而非直接操作圖表。
|
||
|
||
---
|
||
|
||
### 4.5 「深度調查」模式:智能跳脫
|
||
|
||
當用戶需要原始 Grafana / SigNoz 數據時,AWOOOI 提供**智能跳脫**,而非嵌入:
|
||
|
||
```tsx
|
||
// 在 GenUI 卡片中,提供「深度調查」按鈕
|
||
<ServiceDetailCard service="awoooi-api">
|
||
<MetricRow label="P95 延遲" value="124ms" status="healthy" />
|
||
<MetricRow label="錯誤率" value="0.1%" status="healthy" />
|
||
|
||
{/* 智能跳脫按鈕 */}
|
||
<ExternalLinks>
|
||
<SmartLink
|
||
icon="📊"
|
||
label="SigNoz 詳細追蹤"
|
||
href="http://192.168.0.188:3301/traces?service=awoooi-api&from=now-1h"
|
||
target="_blank" // ← 新分頁開啟,不汙染 AWOOOI 界面
|
||
/>
|
||
<SmartLink
|
||
icon="📈"
|
||
label="Grafana 即時圖表"
|
||
href="http://192.168.0.188:3000/d/awoooi-api"
|
||
target="_blank"
|
||
/>
|
||
<SmartLink
|
||
icon="🐛"
|
||
label="Sentry Issues"
|
||
href="http://192.168.0.110:9000/organizations/sentry/issues/?project=awoooi-api"
|
||
target="_blank"
|
||
/>
|
||
</ExternalLinks>
|
||
</ServiceDetailCard>
|
||
```
|
||
|
||
---
|
||
|
||
## 五、監控機制整合實施步驟
|
||
|
||
### Wave M-1: 立即啟動(1 週)
|
||
|
||
#### M-1.1 MinIO 監控整合(1h)
|
||
|
||
```bash
|
||
# 在 192.168.0.188 部署 MinIO Exporter
|
||
docker run -d \
|
||
--name minio-exporter \
|
||
--network momo-pro-network \
|
||
-e MINIO_URL=http://minio:9000 \
|
||
-e MINIO_ACCESS_KEY=<MINIO_ACCESS_KEY> \
|
||
-e MINIO_SECRET_KEY=<MINIO_SECRET_KEY> \
|
||
-p 9290:9290 \
|
||
bitnami/minio-exporter:latest
|
||
|
||
# 在 188:/momo-pro/monitoring/prometheus.yml 加入 scrape target:
|
||
# - job_name: 'minio'
|
||
# static_configs:
|
||
# - targets: ['localhost:9290']
|
||
```
|
||
|
||
#### M-1.2 Prometheus Federation 統一(2h)
|
||
|
||
```yaml
|
||
# 在 188 的 Prometheus 加入聯邦查詢(抓取 .110 的 Prometheus 數據)
|
||
# 188:/momo-pro/monitoring/prometheus.yml 追加:
|
||
|
||
- job_name: 'federate-110'
|
||
scrape_interval: 30s
|
||
honor_labels: true
|
||
metrics_path: '/federate'
|
||
params:
|
||
'match[]':
|
||
- '{job=~".+"}' # 抓取所有 .110 的 job
|
||
static_configs:
|
||
- targets: ['192.168.0.110:9090']
|
||
```
|
||
|
||
#### M-1.3 建立 AI 自治率指數 Prometheus 指標(2h)
|
||
|
||
```python
|
||
# apps/api/src/core/metrics.py 新增:
|
||
|
||
# === AI 自治率追蹤 (The Autonomy Index) ===
|
||
AUTONOMY_INCIDENTS_TOTAL = Counter(
|
||
'awoooi_incidents_total',
|
||
'Total number of incidents received',
|
||
['source', 'severity']
|
||
)
|
||
|
||
AUTONOMY_AUTO_RESOLVED = Counter(
|
||
'awoooi_incidents_auto_resolved_total',
|
||
'Incidents resolved automatically by AI without human intervention',
|
||
['source', 'action_type']
|
||
)
|
||
|
||
AUTONOMY_HUMAN_RESOLVED = Counter(
|
||
'awoooi_incidents_human_resolved_total',
|
||
'Incidents requiring human approval',
|
||
['source', 'risk_level']
|
||
)
|
||
|
||
def record_incident_created(source: str, severity: str):
|
||
AUTONOMY_INCIDENTS_TOTAL.labels(source=source, severity=severity).inc()
|
||
|
||
def record_auto_resolution(source: str, action_type: str):
|
||
AUTONOMY_AUTO_RESOLVED.labels(source=source, action_type=action_type).inc()
|
||
|
||
def record_human_decision(source: str, risk_level: str):
|
||
AUTONOMY_HUMAN_RESOLVED.labels(source=source, risk_level=risk_level).inc()
|
||
|
||
# 自治率計算公式:
|
||
# autonomy_rate = auto_resolved / (auto_resolved + human_decisions) * 100
|
||
```
|
||
|
||
Grafana Dashboard 公式:
|
||
```
|
||
# AI 自治率(24h)
|
||
sum(increase(awoooi_incidents_auto_resolved_total[24h]))
|
||
/
|
||
(
|
||
sum(increase(awoooi_incidents_auto_resolved_total[24h])) +
|
||
sum(increase(awoooi_incidents_human_resolved_total[24h]))
|
||
) * 100
|
||
```
|
||
|
||
### Wave M-2: 短期啟動(2 週)
|
||
|
||
#### M-2.1 FinOps API 端點建立(4h)
|
||
|
||
```python
|
||
# apps/api/src/api/v1/finops.py(新建)
|
||
# 暴露 cost_analyzer.py 的計算結果
|
||
|
||
@router.get("/finops/summary")
|
||
async def get_finops_summary():
|
||
"""
|
||
FinOps 成本摘要
|
||
|
||
Returns:
|
||
{
|
||
"period": "2026-03",
|
||
"total_cost_usd": 12.50,
|
||
"ollama_cost": 0.0, # 本地,零成本
|
||
"gemini_cost": 1.20,
|
||
"claude_cost": 11.30,
|
||
"realizable_savings": 3.50, # 真實可省
|
||
"freed_capacity": 8.00, # 釋放容量(非真實省錢)
|
||
"top_cost_drivers": [...],
|
||
"recommendations": [...]
|
||
}
|
||
"""
|
||
cost_analyzer = get_cost_analyzer()
|
||
return await cost_analyzer.monthly_summary()
|
||
```
|
||
|
||
#### M-2.2 SLO API 端點建立(2h)
|
||
|
||
```python
|
||
# apps/api/src/api/v1/slo.py(新建)
|
||
|
||
@router.get("/slo/status")
|
||
async def get_slo_status():
|
||
"""
|
||
SLO 達成狀況
|
||
|
||
Returns:
|
||
{
|
||
"api": {
|
||
"availability_7d": 99.97, # %
|
||
"latency_p95_7d": 124, # ms
|
||
"target_availability": 99.9,
|
||
"target_latency_p95": 500,
|
||
"status": "healthy" # healthy/at_risk/breached
|
||
},
|
||
"web": {...},
|
||
"overall": "healthy"
|
||
}
|
||
"""
|
||
```
|
||
|
||
#### M-2.3 MTTR API 端點建立(2h)
|
||
|
||
```python
|
||
# apps/api/src/api/v1/stats.py 新增端點
|
||
|
||
@router.get("/stats/mttr")
|
||
async def get_mttr_stats():
|
||
"""
|
||
平均修復時間 (Mean Time To Resolution)
|
||
|
||
計算邏輯:
|
||
- MTTR = avg(resolved_at - created_at) for resolved incidents
|
||
- 分 AI 自動修復 vs 人工審核分別計算
|
||
"""
|
||
```
|
||
|
||
#### M-2.4 Kali Scanner 整合(2h)
|
||
|
||
```python
|
||
# apps/api/src/api/v1/webhooks.py 新增 Kali Scanner Webhook
|
||
|
||
@router.post("/webhooks/kali/scan-result")
|
||
async def handle_kali_scan_result(request: Request):
|
||
"""
|
||
接收 .112 Kali 安全掃描結果
|
||
|
||
Kali 掃描腳本每週執行一次,結果發送至此 Webhook
|
||
高危漏洞 → 自動建立 CRITICAL Approval
|
||
"""
|
||
```
|
||
|
||
Kali 端配置 (`192.168.0.112`):
|
||
```bash
|
||
# 在 112 建立每週掃描腳本
|
||
cat > /opt/awoooi-scanner/weekly-scan.sh << 'EOF'
|
||
#!/bin/bash
|
||
TARGET="192.168.0.120:32334" # AWOOOI API
|
||
RESULT=$(nmap -sV --script vuln $TARGET -oJ -)
|
||
|
||
curl -X POST http://192.168.0.120:32334/api/v1/webhooks/kali/scan-result \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"scan_result\": $RESULT, \"target\": \"$TARGET\"}"
|
||
EOF
|
||
|
||
# 加入 crontab
|
||
echo "0 2 * * 1 /opt/awoooi-scanner/weekly-scan.sh" | crontab -
|
||
```
|
||
|
||
### Wave M-3: 中期啟動(3–4 週)
|
||
|
||
#### M-3.1 Nexus 頁面 AI 自治率指數 UI(8h)
|
||
|
||
```tsx
|
||
// apps/web/src/app/[locale]/(dashboard)/page.tsx
|
||
// 新增 AutonomyIndex 組件
|
||
|
||
interface AutonomyData {
|
||
rate: number; // 70.0
|
||
daily_trend: number; // +12.0 vs yesterday
|
||
auto_resolved_24h: number;
|
||
human_resolved_24h: number;
|
||
}
|
||
|
||
const AutonomyIndexPanel = ({ data }: { data: AutonomyData }) => (
|
||
<div className="bg-white/70 backdrop-blur-[20px] border border-black/[0.06] rounded-xl p-6">
|
||
{/* 大數字:自治率 */}
|
||
<div className="flex items-end gap-3">
|
||
<span className="font-mono text-6xl font-bold text-nothing-ink">
|
||
{data.rate.toFixed(0)}
|
||
<span className="text-2xl text-nothing-gray">%</span>
|
||
</span>
|
||
<div className="mb-2">
|
||
<span className="text-sm text-status-success">
|
||
↗ +{data.daily_trend.toFixed(0)}% {t('nexus.vs_yesterday')}
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
{/* AI 自治率說明 */}
|
||
<p className="font-mono text-xs tracking-widest text-nothing-gray-600 mt-2">
|
||
[AI_AUTONOMY_INDEX] {t('nexus.autonomy_description')}
|
||
</p>
|
||
|
||
{/* 細分:今日自動 vs 需要人工 */}
|
||
<div className="flex gap-6 mt-4 border-t border-black/[0.04] pt-4">
|
||
<div>
|
||
<p className="text-2xl font-bold text-status-success">{data.auto_resolved_24h}</p>
|
||
<p className="text-xs text-nothing-gray">{t('nexus.ai_auto_resolved')}</p>
|
||
</div>
|
||
<div>
|
||
<p className="text-2xl font-bold text-status-warning">{data.human_resolved_24h}</p>
|
||
<p className="text-xs text-nothing-gray">{t('nexus.required_approval')}</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
);
|
||
```
|
||
|
||
#### M-3.2 Omni-Terminal 監控指令整合(8h)
|
||
|
||
後端需要新增以下 Terminal 指令的處理器:
|
||
|
||
```python
|
||
# apps/api/src/services/terminal_service.py 擴充
|
||
|
||
class TerminalCommandRouter:
|
||
|
||
async def route(self, intent: str, context: dict) -> TerminalResponse:
|
||
"""
|
||
監控相關指令路由
|
||
"""
|
||
if intent == "/status":
|
||
return await self._handle_status(context) # 服務健康狀態
|
||
elif intent == "/cost":
|
||
return await self._handle_cost(context) # FinOps 成本
|
||
elif intent == "/slo":
|
||
return await self._handle_slo(context) # SLO 達成率
|
||
elif intent == "/trace":
|
||
return await self._handle_trace(context) # SigNoz Traces
|
||
elif intent == "/alert":
|
||
return await self._handle_alert_chain(context) # 告警鏈路狀態
|
||
elif intent == "/incident":
|
||
return await self._handle_incident(context) # 事件查詢
|
||
elif intent == "/mttr":
|
||
return await self._handle_mttr(context) # 平均修復時間
|
||
```
|
||
|
||
#### M-3.3 監控相關 GenUI 卡片擴充(8h)
|
||
|
||
```typescript
|
||
// apps/web/src/components/genui/registry.ts 新增:
|
||
|
||
export const GENUI_COMPONENTS = {
|
||
// 現有組件...
|
||
|
||
// 新增監控類組件:
|
||
'SystemHealthCard': () => import('./monitoring/SystemHealthCard'),
|
||
'ServiceDetailCard': () => import('./monitoring/ServiceDetailCard'),
|
||
'FinOpsCard': () => import('./monitoring/FinOpsCard'),
|
||
'SLODashboardCard': () => import('./monitoring/SLODashboardCard'),
|
||
'AlertChainStatusCard': () => import('./monitoring/AlertChainStatusCard'),
|
||
'AnomalyFrequencyCard': () => import('./monitoring/AnomalyFrequencyCard'),
|
||
'MTTRCard': () => import('./monitoring/MTTRCard'),
|
||
'KaliScanResultCard': () => import('./monitoring/KaliScanResultCard'),
|
||
}
|
||
```
|
||
|
||
**`SystemHealthCard` 規格**(最核心的監控 GenUI 卡片):
|
||
|
||
```tsx
|
||
// SystemHealthCard 呈現邏輯:
|
||
// - 25 個服務用「燈號矩陣」呈現,非圖表
|
||
// - 每個燈號 hover 顯示服務名稱
|
||
// - 有異常的燈號閃爍(animate-ping)
|
||
// - 右下角「深度調查」按鈕連至 Grafana/SigNoz 新分頁
|
||
|
||
const SystemHealthCard = () => (
|
||
<GenUICard title="系統健康矩陣">
|
||
<div className="grid grid-cols-5 gap-2">
|
||
{services.map(svc => (
|
||
<ServiceOrb
|
||
key={svc.name}
|
||
name={svc.name}
|
||
status={svc.status}
|
||
// healthy: 靜態綠燈
|
||
// warning: 黃燈慢速閃爍
|
||
// critical: 紅燈 animate-ping
|
||
externalLink={svc.grafana_url}
|
||
/>
|
||
))}
|
||
</div>
|
||
|
||
{/* 摘要行 */}
|
||
<p className="font-mono text-xs mt-3">
|
||
25 SERVICES | {healthy_count} HEALTHY | {warning_count} WARNING | {critical_count} CRITICAL
|
||
</p>
|
||
|
||
{/* 智能跳脫 */}
|
||
<ExternalLinks grafana sentry signoz />
|
||
</GenUICard>
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## 六、監控整合路線圖與優先級
|
||
|
||
```
|
||
📅 Week 1 (立即,~7h):
|
||
├── M-1.1 MinIO Exporter 部署 (1h)
|
||
├── M-1.2 Prometheus Federation (2h)
|
||
└── M-1.3 AI 自治率指數 Metrics 建立 (2h + 2h Config)
|
||
|
||
📅 Week 2-3 (短期,~10h):
|
||
├── M-2.1 FinOps API 端點 (4h)
|
||
├── M-2.2 SLO API 端點 (2h)
|
||
├── M-2.3 MTTR API 端點 (2h)
|
||
└── M-2.4 Kali Scanner Webhook 整合 (2h)
|
||
|
||
📅 Month 2 (中期,~24h):
|
||
├── M-3.1 Nexus 頁面 AI 自治率 UI (8h)
|
||
├── M-3.2 Omni-Terminal 監控指令 (8h)
|
||
└── M-3.3 監控 GenUI 卡片擴充 (8h)
|
||
```
|
||
|
||
**監控整合完成後的最终效果**:
|
||
|
||
```
|
||
統帥打開 AWOOOI,看到:
|
||
✦ AI 自治率:今日 72%(↗ 比昨日高 8%)
|
||
✦ 系統健康:25/25 服務正常
|
||
✦ 待決策:0(系統無需要人工干預的事件)
|
||
✦ AI 思考流在背後靜默巡邏...
|
||
|
||
這才是 AI 原生平台,不是監控工具。
|
||
SRE 只在「AI 搞不定的時候」被喚醒,其餘時間人類可以去做更有價值的事。
|
||
```
|
||
|
||
---
|
||
|
||
## 七、ADR 建議
|
||
|
||
本規劃建議新增以下 ADR:
|
||
|
||
| ADR | 主題 | 核心決策 |
|
||
|-----|------|---------|
|
||
| ADR-038 | 監控 UI 三義分離原則 | 靜默消化 vs 主動浮現 vs 外部跳脫 |
|
||
| ADR-039 | AI 自治率指數 (Autonomy Index) | 指標定義與計算公式 |
|
||
| ADR-040 | Kali 安全掃描整合架構 | .112 → Webhook → AI 分析 |
|
||
| ADR-041 | SLO 與 MTTR 業務指標架構 | 計算方法與展示標準 |
|
||
|
||
---
|
||
|
||
*「監控是神經末梢,AI 是大腦。神經不思考,大腦不直接感知。這就是 AWOOOI 的監控哲學。」* 🦞
|