# WOOO-AIOPS 監控機制盤點報告

> **遷移至 AWOOOI 的監控資產清單**
>
> 盤點日期: 2026-03-22
> 來源專案: `/Users/ogt/wooo-aiops`

---

## 1. 監控系統總覽 (Monitoring Stack Overview)

| 元件 | 用途 | 來源路徑 | 遷移優先級 |
|------|------|----------|------------|
| **OpenTelemetry** | Distributed Tracing | `clawbot/app/core/telemetry.py` | 🔴 P0 |
| **Prometheus** | Metrics 採集 | `docker/prometheus/prometheus.yml` | 🔴 P0 |
| **Alertmanager** | 告警路由與通知 | `docker/alertmanager/alertmanager.yml` | 🔴 P0 |
| **SignOz** | APM + Traces + Logs | `infrastructure/signoz/alert-rules.yaml` | 🟡 P1 |
| **Grafana** | 儀表板視覺化 | `docker/grafana/dashboards/*.json` | 🟡 P1 |
| **Loki + Promtail** | Log Aggregation | `docker/loki/loki-config.yml` | 🟡 P1 |

---

## 2. 健康檢查機制 (Health Checks)

### 2.1 API 健康端點

| 端點 | 用途 | 檢查項目 |
|------|------|----------|
| `/health` | Liveness Probe | git_sha, build_time, version |
| `/ready` | Readiness Probe | DB 連線, Redis 連線 |
| `/api/v1/health` | Gateway Health | API 閘道狀態 |

**來源檔案**: `src/api/routes/health.py`

### 2.2 K8s Probes 配置

```yaml
# 來源: infrastructure/kubernetes/base/api-deployment.yaml
livenessProbe:
  httpGet:
    path: /health
    port: 8000
  initialDelaySeconds: 10
  periodSeconds: 30

readinessProbe:
  httpGet:
    path: /ready
    port: 8000
  initialDelaySeconds: 5
  periodSeconds: 10
```

---

## 3. 告警規則盤點 (Alert Rules Inventory)

### 3.1 Prometheus Alert Rules (20+ 條)

**來源檔案**:
- `docker/prometheus/rules/alerts.yml`
- `docker/prometheus/rules/service-health-rules.yml`

#### 3.1.1 系統層級告警 (P0 Critical)

| 告警名稱 | 觸發條件 | 嚴重度 |
|----------|----------|--------|
| `InstanceDown` | 實例離線 > 1m | 🔴 P0 |
| `VersionDriftDetected` | 部署版本與預期不符 | 🔴 P0 |
| `UnexpectedPodRestart` | Pod 非預期重啟 | 🔴 P0 |
| `ImagePullBackOff` | 映像拉取失敗 | 🔴 P0 |
| `PodCrashLoopBackOff` | Pod 持續崩潰 | 🔴 P0 |

#### 3.1.2 CI/CD Pipeline 告警

| 告警名稱 | 觸發條件 | 嚴重度 |
|----------|----------|--------|
| `PipelineFailed` | Pipeline 執行失敗 | 🔴 P0 |
| `PipelineTooSlow` | Pipeline > 30m | 🟡 P1 |
| `JobStuckPending` | Job 排隊 > 5m | 🟡 P1 |
| `JobRunningTooLong` | Job 執行 > 30m | 🟡 P1 |
| `GitLabRunnerOffline` | Runner 離線 | 🔴 P0 |

#### 3.1.3 基礎設施告警

| 告警名稱 | 觸發條件 | 嚴重度 |
|----------|----------|--------|
| `HighCpuLoad` | CPU > 90% for 5m | 🔴 P0 |
| `HighMemoryUsage` | Memory > 90% for 5m | 🔴 P0 |
| `DiskSpaceLow` | Disk > 85% | 🟡 P1 |
| `HTTP502Spike` | 502 錯誤激增 | 🔴 P0 |
| `HTTP500Spike` | 500 錯誤激增 | 🔴 P0 |

#### 3.1.4 資料庫/快取告警

| 告警名稱 | 觸發條件 | 嚴重度 |
|----------|----------|--------|
| `PostgreSQLConnectionFailed` | DB 連線失敗 | 🔴 P0 |
| `RedisConnectionFailed` | Redis 連線失敗 | 🔴 P0 |
| `PostgreSQLConnectionPoolExhausted` | 連線池 > 90% | 🟡 P1 |

#### 3.1.5 SSL 憑證告警

| 告警名稱 | 觸發條件 | 嚴重度 |
|----------|----------|--------|
| `SSLCertExpiringSoon` | 憑證 14 天內到期 | 🟡 P1 |
| `SSLCertExpired` | 憑證已過期 | 🔴 P0 |

#### 3.1.6 效能告警

| 告警名稱 | 觸發條件 | 嚴重度 |
|----------|----------|--------|
| `APIResponseTimeSlow` | P95 延遲 > 2s | 🟡 P1 |
| `HighErrorRate` | 錯誤率 > 1% | 🟡 P1 |
| `WebSocketConnectionFailed` | WebSocket 失敗 | 🟢 P2 |

### 3.2 SignOz Alert Rules (30+ 條)

**來源檔案**: `infrastructure/signoz/alert-rules.yaml`

| 類別 | 告警數量 | 嚴重度分佈 |
|------|----------|------------|
| 資料庫 | 5 | P0: 2, P1: 3 |
| 快取 | 3 | P0: 1, P1: 2 |
| HTTP 錯誤 | 6 | P0: 2, P1: 2, P2: 2 |
| 容器 | 4 | P0: 2, P1: 2 |
| 服務專屬 | 12 | 依服務而定 |

**服務專屬告警涵蓋**:
- Gitea, Harbor, OpenClaw, Ollama, SignOz, n8n

---

## 4. 通知管道盤點 (Notification Channels)

### 4.1 Telegram 整合

**來源檔案**:
- `src/api/routes/telegram_alerts.py`
- `clawbot/app/bot/telegram.py`

| 頻道 | 環境變數 | 用途 |
|------|----------|------|
| 一般告警 | `TELEGRAM_CHAT_ID` | 全部告警 |
| P0 緊急 | `TELEGRAM_P0_CHAT_ID` | Critical 專用 |
| 資安告警 | `TELEGRAM_SECURITY_CHAT_ID` | Security 專用 |

**功能**:
- HTML 格式化 + Emoji 嚴重度標示
- 背景任務發送 (non-blocking)
- 雙向互動: `/ask` 指令觸發 AI 診斷

### 4.2 Slack 整合

**來源檔案**: `docker/alertmanager/alertmanager.yml`

| 頻道 | 用途 |
|------|------|
| `#alerts` | 預設告警 |
| `#alerts-security` | 資安告警 |
| `#alerts-security-critical` | 資安緊急 |
| `#alerts-infra` | 基礎設施 |
| `#p0-war-room` | P0 作戰室 |

### 4.3 PagerDuty On-Call

| 服務 | SLA | 用途 |
|------|-----|------|
| P0 Service Key | 5 分鐘回應 | Critical |
| P1 Service Key | 15 分鐘回應 | High |

**自動升級至 C-Level**

### 4.4 Email 通知

**來源檔案**: `src/services/notification.py`

- SMTP (TLS/STARTTLS)
- aiosmtplib 非同步
- HTML + Plain-text

---

## 5. 自動修復機制 (Auto-Remediation)

### 5.1 修復引擎 v1 (Remediation Engine)

**來源檔案**: `src/automation/remediation_engine.py`

#### 修復動作對照表

| 動作 | 說明 | 觸發告警 |
|------|------|----------|
| `restart_pod` | Pod 重啟 | HighErrorRate, PodCrashLooping, SlowResponse, ServiceDown |
| `scale_up` | 水平擴展 | HighCPU, HighMemory |
| `scale_down` | 縮減副本 | 手動觸發 |
| `rollback_deployment` | 版本回滾 | 手動觸發 |
| `clear_cache` | 清除 Redis | 手動觸發 |

#### 安全護欄

```python
# 白名單 Namespace
ALLOWED_NAMESPACES = ["wooo-aiops-uat", "wooo-aiops-prod"]

# Dry-Run 模式
AUTOMATION_DRY_RUN = True/False

# 最大副本數限制
MAX_REPLICAS = 10
```

### 5.2 修復引擎 v2 (Repair Engine)

**來源檔案**: `src/engines/repair_engine.py`

#### 8 種修復策略

| 策略 | 說明 |
|------|------|
| `RESTART` | Pod 重啟 |
| `SCALE_UP` | 水平擴展 |
| `SCALE_DOWN` | 縮減副本 |
| `ROLLBACK` | 版本回滾 |
| `INCREASE_MEMORY` | 調整記憶體 (+50% max) |
| `INCREASE_CPU` | 調整 CPU (+50% max) |
| `VACUUM_DB` | 資料庫維護 |
| `CLEAR_CACHE` | 清除快取 |

#### 安全限制

| 參數 | 值 | 說明 |
|------|-----|------|
| Max repairs/hour | 5 | 每小時最多修復次數 |
| Max consecutive failures | 3 | 連續失敗後停止 |
| Min healthy replicas | 1 | 最少健康副本 |
| Rollback window | 24h | 回滾時間窗口 |
| Memory increase limit | 50% | 記憶體增幅上限 |
| CPU increase limit | 50% | CPU 增幅上限 |

### 5.3 自動恢復腳本

**來源檔案**: `scripts/auto-recovery.sh`

**Cron 排程**: 每 10 分鐘執行

```bash
# 檢查項目
1. API Health Check (HTTP 200)
2. Frontend Health Check (HTTP 200/302)
3. Disk Space (>90% 觸發清理)
4. GitHub Actions Runner 狀態
5. 服務重啟恢復
```

**日誌位置**: `/var/log/wooo/auto-recovery.log`

---

## 6. SLA 引擎與升級機制 (SLA Engine)

**來源檔案**: `src/engines/sla_engine.py`

### 6.1 SLA 門檻

| 優先級 | 回應時間 | 解決時間 |
|--------|----------|----------|
| P0 | 5 分鐘 | 30 分鐘 |
| P1 | 15 分鐘 | 2 小時 |
| P2 | 1 小時 | 8 小時 |
| P3 | 4 小時 | 24 小時 |

### 6.2 升級層級

| Level | 角色 |
|-------|------|
| L0 | L1 Support (一線支援) |
| L1 | L2 Expert (專家支援) |
| L2 | Team Lead (部門主管) |
| L3 | Director (總監) |
| L4 | C-Level (CEO, CTO, CIO, CISO, CPO) |

### 6.3 升級矩陣

| 優先級 | 升級路徑 |
|--------|----------|
| P0 | On-Call → Team Lead → CIO → CISO → CEO |
| P1 | On-Call → Team Lead → CIO |
| P2 | On-Call → Team Lead |
| P3 | On-Call 僅 |

---

## 7. 告警聚合與去重 (Alert Aggregation)

**來源檔案**: `src/services/alert_aggregator.py`

### 功能

| 功能 | 說明 |
|------|------|
| 指紋去重 | 相同告警精確比對 |
| 時間窗口去重 | 5 分鐘內相同告警 |
| 告警風暴偵測 | > 10 告警/分鐘 |
| 標籤分組 | 相似標籤聚合 |

### Prometheus Metrics

```promql
wooo_alerts_received_total{severity, source}
wooo_alerts_deduplicated_total{reason}
wooo_alerts_aggregated_total{group_key}
wooo_alert_groups_active
wooo_alert_storm_detected_total
```

---

## 8. Grafana 儀表板盤點 (Dashboards)

| 儀表板 | 路徑 | 用途 |
|--------|------|------|
| AIOPS Brain | `infrastructure/grafana/dashboards/aiops-brain.json` | AI 大腦狀態 |
| API Performance | `docker/grafana/dashboards/api-performance.json` | API 效能 |
| Container Health | `docker/grafana/dashboards/container-health.json` | 容器健康 |
| System Overview | `docker/grafana/dashboards/system-overview.json` | 系統總覽 |
| DevOps KPIs | `infrastructure/grafana/dashboards/devops-kpis.json` | DevOps 指標 |
| Pipeline Health | `infrastructure/grafana/dashboards/pipeline-health.json` | Pipeline 健康 |

---

## 9. 告警工單整合 (Alert-to-Ticket)

**來源檔案**: `src/services/alert_ticket_service.py`

| 功能 | 說明 |
|------|------|
| 自動建票 | 所有告警自動建立工單 |
| 去重機制 | 防止相同告警重複建票 |
| 嚴重度對映 | P0/P1/P2 → 工單優先級 |
| 自動關閉 | 告警解除時自動關閉工單 |

---

## 10. 自訂 Metrics 匯出 (Custom Metrics)

### 10.1 部署追蹤

```promql
wooo_deployment_version_drift      # 1 = 版本漂移
wooo_pipeline_status{status}       # failed = 1
wooo_pipeline_duration_seconds
wooo_job_queued_duration_seconds
wooo_job_duration_seconds
wooo_gitlab_runner_status          # 0 = offline
```

### 10.2 自動修復

```promql
wooo_repair_total{app_id, action, status}
wooo_repair_duration_seconds{app_id, action}
wooo_repair_in_progress{app_id}
```

---

## 11. 告警流程圖 (Notification Flow)

```
┌─────────────────────────────────────────────────────────────┐
│                    Alert Triggered                          │
│               (Prometheus / SignOz)                         │
└──────────────────────┬──────────────────────────────────────┘
                       ↓
┌─────────────────────────────────────────────────────────────┐
│                  Alertmanager Webhook                       │
└──────────────────────┬──────────────────────────────────────┘
                       ↓
        ┌──────────────┼──────────────┬──────────────┐
        ↓              ↓              ↓              ↓
   ┌─────────┐   ┌──────────┐   ┌──────────┐   ┌───────────┐
   │ Ticket  │   │ Telegram │   │ PagerDuty│   │   Slack   │
   │ System  │   │   Bot    │   │ (On-Call)│   │ Channels  │
   └─────────┘   └──────────┘   └──────────┘   └───────────┘
                       │
                       ↓
        ┌──────────────────────────────────────┐
        │       Auto-Remediation Engine        │
        ├──────────────────────────────────────┤
        │ 1. Validate target (whitelist)       │
        │ 2. Execute repair action             │
        │ 3. Record result in DB               │
        │ 4. Notify outcome (Telegram/NATS)    │
        └──────────────────────────────────────┘
```

---

## 12. 遷移至 AWOOOI 建議

### 12.1 必須遷移 (P0)

| 元件 | 原路徑 | 建議新路徑 |
|------|--------|------------|
| OpenTelemetry 初始化 | `clawbot/app/core/telemetry.py` | `apps/api/src/core/telemetry.py` |
| Prometheus Client | `src/services/prometheus_client.py` | `apps/api/src/services/` |
| Health Routes | `src/api/routes/health.py` | `apps/api/src/routes/health.py` |
| Alert Rules | `docker/prometheus/rules/*.yml` | `ops/prometheus/rules/` |
| Alertmanager Config | `docker/alertmanager/*.yml` | `ops/alertmanager/` |

### 12.2 可選遷移 (P1)

| 元件 | 說明 |
|------|------|
| Grafana Dashboards | 6 個儀表板 JSON |
| Loki + Promtail | Log 聚合 |
| SLA Engine | 升級機制 |
| Alert Aggregator | 告警去重 |

### 12.3 需重構 (P2)

| 元件 | 原因 |
|------|------|
| Remediation Engine | 需適配新的 Multi-Sig 審批流程 |
| On-Call Service | 需整合新的 OpenClaw 通知 |

---

## 附錄: 關鍵設定檔清單

| 設定檔 | 路徑 |
|--------|------|
| Alertmanager 主設定 | `docker/alertmanager/alertmanager.yml` |
| Alertmanager 生產設定 | `infrastructure/alertmanager/alertmanager.yml` |
| Prometheus Alert Rules | `docker/prometheus/rules/alerts.yml` |
| Service Health Rules | `docker/prometheus/rules/service-health-rules.yml` |
| SignOz Alert Rules | `infrastructure/signoz/alert-rules.yaml` |
| Prometheus Scrape Config | `docker/prometheus/prometheus.yml` |
| K8s API Deployment | `infrastructure/kubernetes/base/api-deployment.yaml` |
| Monitoring Cron Jobs | `infrastructure/cron/monitoring-jobs.cron` |
| Auto-Recovery Script | `scripts/auto-recovery.sh` |

---

**盤點完成**: 2026-03-22
**盤點人員**: Claude Code (Monitoring Inventory Agent)
