From fc03eb1f4d3b2453a59402c1acea666df83a9eb6 Mon Sep 17 00:00:00 2001 From: OG T Date: Thu, 9 Apr 2026 12:26:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(auto-repair):=20=5Fextract=5Fsymptoms=20?= =?UTF-8?q?=E5=84=AA=E5=85=88=E7=94=A8=20labels.alertname=20=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E5=8E=9F=E5=A7=8B=20alertname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 問題: signal.alert_name 存的是 alert_type (如 "custom"),而非 Prometheus alertname (如 "SentryDown"),導致 playbook Jaccard 匹配永遠失敗 (NO_MATCH)。 根本原因: webhook 的 alertname_to_type mapping 將未知 alertname 轉為 "custom", 存入 signal.alert_name,但 Playbook 的 symptom_pattern.alert_names 存原始名稱。 修正: 從 signal.labels["alertname"] 讀取原始 Prometheus alertname, fallback 到 signal.alert_name (保持向下相容)。 Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/services/auto_repair_service.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/api/src/services/auto_repair_service.py b/apps/api/src/services/auto_repair_service.py index bbcc53ac..4c29510c 100644 --- a/apps/api/src/services/auto_repair_service.py +++ b/apps/api/src/services/auto_repair_service.py @@ -517,7 +517,11 @@ class AutoRepairService: if incident.signals: for signal in incident.signals: - alert_names.append(signal.alert_name) + # 優先用 labels["alertname"](原始 Prometheus alertname), + # fallback 到 signal.alert_name(可能是 "custom" 等類別值) + # (2026-04-09 Claude Sonnet 4.6 Asia/Taipei, L7 E2E 修正) + raw_alertname = signal.labels.get("alertname") if signal.labels else None + alert_names.append(raw_alertname or signal.alert_name) # 從 annotations 提取關鍵字 if signal.annotations: for value in signal.annotations.values():