Files
awoooi/ops/alertmanager/alertmanager.yml
ogt 541a32a9cb
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m38s
CD Pipeline / build-and-deploy (push) Failing after 24m19s
CD Pipeline / post-deploy-checks (push) Has been skipped
feat(sre): enforce typed controlled automation
2026-07-16 17:32:01 +08:00

155 lines
6.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWOOOI Alertmanager 配置
# 2026-04-05 Claude Code: 修正 webhook URL
# 修正前: http://192.168.0.188:8088/api/v1/webhook/alertmanager (OpenClaw舊系統錯誤)
# 修正後: https://awoooi.wooo.work/api/v1/webhooks/alertmanager (AWOOOI public API複數正確)
# 根據 feedback_alertmanager_awoooi_flow.md 鐵律
# 2026-04-09 Claude Sonnet 4.6 Asia/Taipei: 新增 Telegram Fallback (ADR-035)
# 架構: awoooi-webhook (主路徑) + telegram-direct
# Agent99 對 AlertChainBroken_Alertmanager 採主動唯讀 poll不是 receiver。
# telegram-direct 只允許處理 AWOOOI API / AlertChain 自身異常;一般 critical 必須走 AWOOOI API 治理鏈。
# 旁路目的地必須是 AwoooI SRE 戰情室OPENCLAW_TG_CHAT_ID 只允許作缺值時的 fail-soft fallback。
# ⚠️ bot_token/chat_id 部署時由 secrets 替換,此檔為模板
#
# 2026-04-29 ogt + Claude Opus 4.7: P1-4 新版語法升級 + 因果抑制擴展
# 改動:
# 1. match/match_re → matchers (Alertmanager v0.27+ deprecated 警告)
# 2. source_match/target_match/target_match_re → source_matchers/target_matchers
# 3. group_by 加 team label防 4 條 SLO 同秒爆,依 web-researcher 文件)
# 4. PostgreSQLDown / RedisDown inhibit 補 equal: ['instance'](防全 ns 爆炸抑制)
# 5. 新增 OllamaInstanceDown / KMConverterDown / SLO FastBurn 三組因果抑制
# 根因:本次 4 SLO 雪崩證實 Ollama 111 掛 → AI 推理鏈斷 → SLO 級聯爆炸無守門
# 6. 命名鐵律 feedback_telegram_alert_format.md 對齊label team=ai/component/auto_repair
global:
resolve_timeout: 5m
route:
receiver: 'awoooi-webhook'
# 2026-04-29: 加 team — SLO/AI PrometheusRule 含 team=ai 時可獨立分組合併
group_by: ['team', 'alertname', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
# Emergency-only direct Telegram route.
# Alertmanager cannot "fallback on webhook send failure", so this route is gated by
# explicit alert-chain/API health alertnames instead of severity=critical.
- matchers:
- alertname=~"AWOOOIApiDown|AlertmanagerDown|AlertChainBroken_.*|AlertChainUnhealthy|NoAlertsReceived2Hours"
receiver: 'telegram-direct'
group_wait: 10s
repeat_interval: 2h
continue: true
- matchers:
- severity="critical"
receiver: 'awoooi-webhook'
group_wait: 10s
- matchers:
- severity="warning"
receiver: 'awoooi-webhook'
- matchers:
- alertname=~"Zombie.*|Container.*"
receiver: 'awoooi-webhook'
group_wait: 1m
receivers:
# 主路徑: AWOOOI API 處理所有告警 (AI 分析 + 去重 + Telegram)
# 2026-07-02 Codex: 125:32334 已 connection refused告警仍 firing 但
# Alertmanager → AWOOOI API → TelegramGateway 主鏈斷。主路徑改走 public
# HTTPS route避免單一 K8s VIP / NodePort 漂移讓 110 CPU / reboot SLO
# 告警只停在 Prometheus / Alertmanager。
- name: 'awoooi-webhook'
webhook_configs:
- url: 'https://awoooi.wooo.work/api/v1/webhooks/alertmanager'
send_resolved: true
# Emergency 路徑: AWOOOI API / AlertChain 自身異常時直接送 Telegram 到 SRE 群組。
# 一般 critical 不得走此 receiver避免繞過 AWOOOI 去重、AI 分析、Approval 與 Audit。
# ⚠️ bot_token / chat_id 由 CD pipeline 在 deploy 時用 K8s Secret 注入
# feedback_telegram_secrets_injection.md 鐵律:禁止 PLACEHOLDER 上線
- name: 'telegram-direct'
telegram_configs:
- bot_token: 'TELEGRAM_BOT_TOKEN_PLACEHOLDER'
chat_id: SRE_GROUP_CHAT_ID_PLACEHOLDER
parse_mode: 'HTML'
message: |
🚨 <b>SRE BYPASS告警主鏈異常</b>
{{ range .Alerts }}
<b>{{ .Labels.severity }}{{ .Labels.alertname }}</b>
├ 資產:{{ if .Labels.component }}{{ .Labels.component }}{{ else if .Labels.service }}{{ .Labels.service }}{{ else }}alert-chain{{ end }}
├ 狀態:{{ .Annotations.summary }}
└ 影響AWOOOI 主鏈 delivery / automation receipt 可信度下降
{{ end }}
🤖 <b>自動化證據</b>
├ 判斷Prometheus deterministic rule未呼叫 LLM
├ AgentAlertmanager emergency router
├ 動作:僅送緊急旁路;未宣稱已修復
├ Executornone
└ Verifiersource-specific delivery metric + AWOOOI E2E receipt pending
<i>下一步:由 canonical typed route 建立受控修復與獨立驗證;同一 firing state 2 小時內不重送。</i>
send_resolved: false
inhibit_rules:
# === 基礎因果抑制(原有規則,新語法重寫)===
- source_matchers:
- severity="critical"
target_matchers:
- severity="warning"
equal: ['alertname', 'instance']
- source_matchers:
- alertname="HostDown"
target_matchers:
- alertname=~"HostHighCpuLoad|HostMemoryUsageHigh|HostOutOfMemory|HostOutOfDiskSpace"
equal: ['host']
- source_matchers:
- alertname="KubeNodeNotReady"
target_matchers:
- alertname=~"KubePodCrashLooping|KubePodNotReady|KubeDeploymentReplicasMismatch"
equal: ['node']
# 2026-04-29: 補 equal: ['instance'] — 原本缺PG 在 instance A down
# 不該抑制 instance B 的 HighConnections爆炸抑制 bug
- source_matchers:
- alertname="PostgreSQLDown"
target_matchers:
- alertname="PostgreSQLHighConnections"
equal: ['instance']
- source_matchers:
- alertname="RedisDown"
target_matchers:
- alertname="RedisMemoryHigh"
equal: ['instance']
# === 新增AI 鏈因果抑制2026-04-29 ADR-035 因果抑制擴展)===
# 根因:本次 4 SLO 雪崩證實 Ollama 111 掛 → AI 推理鏈斷 → 4 SLO 同秒爆
# 無此抑制 → 假警報淹沒真警報Ollama down 本身才是真信號)
# Ollama 任一實例掛 → 抑制所有 AI/SLO 告警 30 分鐘
# 2026-04-29 ogt + Claude Opus 4.7: critic M4 修 — equal:[] 過寬,可能誤抑跨 cluster
# 加 ['cluster'] 約束(同 cluster 才抑制)
# 注意:本 cluster 目前單一,若 instance label 同步加在 SLO rule 可進一步收緊
- source_matchers:
- alertname="OllamaInstanceDown"
target_matchers:
- alertname=~"SLO_.*|AI_.*"
equal: ['cluster']
# KM converter 掛 → 抑制 KM Growth Rate SLO避免 KM 寫入失敗本身觸發 SLO
- source_matchers:
- alertname="KMConverterDown"
target_matchers:
- alertname=~"SLO_KMGrowthRate.*"
equal: ['cluster']
# 同 SLO 較嚴重抑制較輕FastBurn 抑制 Medium/Slow Burn
- source_matchers:
- alertname=~"SLO_.+_FastBurn"
target_matchers:
- alertname=~"SLO_.+_(Medium|Slow)Burn"
equal: ['alertname']