diff --git a/apps/api/src/services/proactive_inspector.py b/apps/api/src/services/proactive_inspector.py index 78945747..681db065 100644 --- a/apps/api/src/services/proactive_inspector.py +++ b/apps/api/src/services/proactive_inspector.py @@ -46,32 +46,41 @@ K8S_NAMESPACE = "awoooi-prod" # - http_error_rate: Prometheus 實測確認 metric 名稱為 probe_success(非 blackbox_probe_success) # - cpu_usage_awoooi_api: cadvisor up=0(停止),改用 node-exporter node_cpu_seconds_total(node level) # - memory_usage_awoooi_api: cadvisor 停止,改用 node-exporter 記憶體使用率比例(0-1 scale) +# 2026-04-26 critic-H2/H4 hotfix by Claude Opus 4.7: +# - cpu/memory metric 改名 _node_188 — 語意從 container 變 node,避免污染既有 baseline +# 舊 baseline (container working set) 的數值範圍跟新 (node ratio) 完全不同, +# 保留同名會造成 baseline 學到的 σ 完全失真,5 分鐘內狂報假 anomaly。 +# - http_error_rate 加 `or vector(1)` fallback:probe_success 全部不可達時不誤觸發 MONITORED_METRICS: list[dict[str, Any]] = [ { "name": "http_error_rate", # probe_success:Blackbox Exporter 實際 metric 名稱(非 blackbox_probe_success) - # 實測確認:curl 'http://192.168.0.188:9090/api/v1/query' --data-urlencode 'query=avg(probe_success)' → 0.944 - "promql": '1 - avg(probe_success)', + # 2026-04-26 H4 hotfix: avg() 在所有 target 缺值時回空 vector,搭配 fallback `or vector(1)` + # 防 _fetch_current_value 把空當 0 → 1-0=1 → 5min 一次假告警洪水 + # 語意:探測全失敗時 fallback=1(視為「全部成功」),避免假告警;真正 down 由 BlackboxProbeFailure 抓 + "promql": '1 - avg(probe_success or on() vector(1))', "threshold": 0.05, # > 5% probe 失敗 = 警戒 "description": "HTTP Probe 失敗率(Blackbox Exporter)", }, { - "name": "cpu_usage_awoooi_api", + # 2026-04-26 H2 hotfix: 改名 _node_188(原 _awoooi_api 語意是 container working set) + "name": "cpu_usage_node_188", # cadvisor up=0(prod-docker-188 離線),改用 node-exporter node-level CPU # 實測確認:avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) → 有資料 # threshold 0.85 = 85% CPU 使用率(node level,0-1 比例) "promql": 'avg(rate(node_cpu_seconds_total{mode!="idle"}[5m]))', "threshold": 0.85, # > 85% node CPU(所有 core 平均) - "description": "Node CPU 使用率(node-exporter,cadvisor 停止時替代)", + "description": "Node 188 CPU 使用率(node-exporter,cadvisor 停止時替代)", }, { - "name": "memory_usage_awoooi_api", + # 2026-04-26 H2 hotfix: 改名 _node_188 + "name": "memory_usage_node_188", # cadvisor 停止,改用 node-exporter 節點記憶體使用率比例(0-1) # 實測確認:188 機器 62.76 GiB,當前 ~30% 使用率 # threshold 0.85 = 85% node memory usage "promql": '(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes', "threshold": 0.85, # > 85% node memory(0-1 比例) - "description": "Node 記憶體使用率(node-exporter,cadvisor 停止時替代)", + "description": "Node 188 記憶體使用率(node-exporter,cadvisor 停止時替代)", }, { "name": "pod_restart_rate",