From 1f7975170a4a02b2ae0d758c1bb78556612e8c99 Mon Sep 17 00:00:00 2001 From: OG T Date: Sun, 12 Apr 2026 19:52:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(classify):=20HostBackupFailed=20=E8=A3=9C?= =?UTF-8?q?=E5=85=A5=20backup/TYPE-1=20=E8=A6=8F=E5=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit classify_alert_early() 的 backup 規則只攔 watchdog/Heartbeat, HostBackupFailed 先被 Host prefix 規則攔走 → host_resource/TYPE-3 → 跑 LLM → 審批卡。 修法:在 Host prefix 前新增 backup 關鍵字/前綴攔截: - HostBackup* / Backup* / VeleroBackup* / BackupRestore* - alertname 含 "backup"(大小寫不敏感) 影響:所有備份相關告警直接走 TYPE-1 info 通知,不進 LLM。 HostHighCpu / HostDown 等非備份的 Host 告警不受影響。 2026-04-12 ogt Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/services/incident_service.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/api/src/services/incident_service.py b/apps/api/src/services/incident_service.py index ee7af0ba..60bdb93c 100644 --- a/apps/api/src/services/incident_service.py +++ b/apps/api/src/services/incident_service.py @@ -163,8 +163,15 @@ def classify_alert_early(alertname: str, severity: str, labels: dict | None = No if severity in ("info", "none"): return "info", "TYPE-1" - # 5. Backup / Heartbeat(Velero 已由 K8s prefix 規則接管) - if "watchdog" in alertname_lower or alertname == "Heartbeat": + # 5. Backup / Heartbeat — 純資訊,不進 LLM + # HostBackupFailed 必須在 Host prefix 前攔截,否則被歸 host_resource/TYPE-3 + # 2026-04-12 ogt: 補充 HostBackup/Backup/VeleroBackup 前綴 + if ( + "watchdog" in alertname_lower + or alertname == "Heartbeat" + or alertname.startswith(("HostBackup", "Backup", "VeleroBackup", "BackupRestore")) + or "backup" in alertname_lower + ): return "backup", "TYPE-1" # 6. 主機資源(從 infrastructure 分離,ADR-075 統帥決議)