From af49a5472891fb90b1bce6e3c2dfd2830b216d79 Mon Sep 17 00:00:00 2001 From: OG T Date: Thu, 9 Apr 2026 12:05:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(playbook):=20alert=5Fnames=20=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E5=8C=B9=E9=85=8D=E6=99=82=20bypass=20=E7=9B=B8?= =?UTF-8?q?=E4=BC=BC=E5=BA=A6=E9=96=80=E6=AA=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 症狀: SentryDown/OllamaDown 告警觸發 incident,但 playbook 搜索 回傳 NO_MATCH,即使 alert_names 完全一致。 根本原因: Jaccard 加權計算中,affected_services 存的是 Prometheus instance IP (192.168.0.110:9000),而 Playbook 存的是服務名 (sentry), 導致 services 維度得 0,最終 0.35 < min_similarity=0.4。 修正: alert_names 有交集時直接通過,不受其他維度拉低分數影響。 Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/repositories/playbook_repository.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/api/src/repositories/playbook_repository.py b/apps/api/src/repositories/playbook_repository.py index 468dd2d9..2532ca98 100644 --- a/apps/api/src/repositories/playbook_repository.py +++ b/apps/api/src/repositories/playbook_repository.py @@ -272,7 +272,11 @@ class PlaybookRepository: playbook.symptom_pattern, ) - if similarity >= min_similarity: + # alert_names 完全匹配時,保證通過(不因其他維度拉低分數) + alert_exact_match = bool( + set(symptoms.alert_names) & set(playbook.symptom_pattern.alert_names) + ) + if alert_exact_match or similarity >= min_similarity: results.append((playbook, similarity)) # 3. 排序並返回 Top K