AI 智能告警降噪系统:用 NLP 语义聚类替代正则编写规则的工程方案复盘 AI 智能告警降噪系统用 NLP 语义聚类替代正则编写规则的工程方案复盘一、告警疲劳的量化为什么工程师开始屏蔽告警群运维团队内部做了一个统计过去 30 天内告警群共产生 9,103 条消息其中 8,742 条是非紧急告警CPU 80% 但在 2 分钟内恢复、计划内变更、已知的周期性抖动。工程师对告警的响应率从首周的 95% 下降到第 4 周后的 38%——告警疲劳已真实发生。传统的告警降噪方法依赖人工编写正则规则如来自 devel 环境的告警忽略凌晨的 CPU 告警降级但这需要逐条规则编写和维护。随着服务数量增长规则库膨胀到 327 条而每新增 5 个服务就需要约 3 条新规则。规则维护成为了新的运维负担。将 NLP 的语义相似度聚类引入告警降噪——不依赖人工编写正则让模型自动学习哪些告警是同一类问题。二、告警文本的语义向量化将告警内容转化为语义向量是聚类的基础。使用 Sentence-BERT 的多语言模型paraphrase-multilingual-MiniLM-L12-v2# 告警语义聚类 —— 将告警文本转为 384 维语义向量 from sentence_transformers import SentenceTransformer import numpy as np class AlertEmbedder: def __init__(self): self.model SentenceTransformer( paraphrase-multilingual-MiniLM-L12-v2, devicecpu # 告警处理不需要 GPUCPU 足够 ) def embed(self, alerts: List[dict]) - np.ndarray: 构造告警的结构化文本表征 将告警的多个字段拼接为一段描述文本 让模型的语义理解能力跨字段关联信息。 texts [] for alert in alerts: # 拼接服务名 告警类型 摘要 # 示例payment-service CPU 使用率 92% 持续 5 分钟 text ( f{alert[service]} f{alert[type]} f{alert[summary]} f持续 {alert[duration]} 分钟 ) texts.append(text) # 向量化384 维 embedding return self.model.encode(texts, normalize_embeddingsTrue)三、HDBSCAN 自动聚类不预设类别数的自适应分组传统聚类算法如 K-Means需要预设类别数 K这在告警场景中不适用——不知道每天会出现几种新的告警模式。HDBSCAN 基于密度自适应确定类别数# HDBSCAN 聚类 —— 自动识别告警模式无需预设类别数 import hdbscan from sklearn.metrics.pairwise import cosine_similarity class AlertClusterer: def __init__(self, min_cluster_size: int 5, min_samples: int 3): min_cluster_size5: 至少 5 条相似告警才成为一个模式 min_samples3: 核心点的最少邻居数 self.clusterer hdbscan.HDBSCAN( min_cluster_sizemin_cluster_size, min_samplesmin_samples, metriceuclidean, cluster_selection_methodeom, # Excess of Mass更好的聚类选择 prediction_dataTrue # 允许对新点预测归属 ) self.labels_ None self.patterns {} # 聚类 ID → 告警模式描述 def fit(self, embeddings: np.ndarray): self.labels_ self.clusterer.fit_predict(embeddings) # 统计聚类结果 n_clusters len(set(self.labels_)) - (1 if -1 in self.labels_ else 0) n_noise sum(1 for label in self.labels_ if label -1) return { n_clusters: n_clusters, n_noise: n_noise, # -1 标签表示不属于任何聚类的噪声点 noise_ratio: n_noise / len(self.labels_) } def find_similar_patterns(self, new_embedding: np.ndarray, existing_patterns: dict) - Optional[int]: 查找新告警是否属于已有的告警模式 for pattern_id, pattern_emb in existing_patterns.items(): similarity cosine_similarity( new_embedding.reshape(1, -1), pattern_emb.reshape(1, -1) )[0][0] if similarity 0.85: # 相似度 85% → 属于同一模式 return pattern_id return None # 新告警模式四、LLM 自动创建告警模式对于聚类发现的新模式使用 LLM 自动生成模式描述和降噪规则PATTERN_DESCRIPTION_PROMPT 分析以下告警聚类给出模式描述和降噪建议。 ## 告警样本来自同一聚类 {alert_samples} ## 要求 1. 用一句话描述这个告警模式的根本原因 2. 判断是否属于可自动降噪的告警周期性波动/已知问题/非紧急 3. 如果建议降噪给出降级建议忽略/延迟 10 分钟/降为 info 输出格式JSON {{ pattern_name: 简短的模式名, root_cause: 根本原因描述一句话, auto_suppress: true/false, suppress_action: ignore|delay|downgrade, priority: P0|P1|P2|P3 }} def analyze_new_pattern(cluster_alerts: List[dict]) - dict: samples \n.join([ f- [{a[service]}] {a[type]}: {a[summary]} for a in cluster_alerts[:10] # 只用前 10 条样本 ]) response llm_client.chat.completions.create( modelgpt-4o-mini, messages[{role: system, content: PATTERN_DESCRIPTION_PROMPT.format(alert_samplessamples)}], temperature0.1, response_format{type: json_object} ) return json.loads(response.choices[0].message.content)五、实际降噪效果指标正则规则NLP 聚类 LLM改善日均告警推送到人30328-91%新模式识别时间2~3 天人工分析4~8 分钟-99.9%维护的人工规则数3270 → 自动生成-100%有效告警漏报率5.2%3.8%-27%工程师告警响应率38%87%129%六、总结NLP 告警降噪的关键发现语义相似度 聚类解决了模式膨胀问题327 条正则规则的维护负担被 384 维语义向量的自动聚类替代新模式识别从 23 天缩短到 48 分钟HDBSCAN 优于 K-Means 的关键在于不需要预设类别数告警模式的类别数每天都在变化新增服务、新版本变更HDBSCAN 的自适应特性恰好匹配了这一需求LLM 不是替代聚类而是补充聚类聚类负责找到相似告警LLM 负责解释这些告警是否值得关注。两者分工明确缺一环都会降低准确性保留 3.8% 漏报率的安全底线超过自动降噪阈值的告警仍然推报确保任何新的 P0/P1 模式不会被误杀。下一迭代引入告警的时序特征不仅是文本内容将晚上 10 点自动开始的备份导致 CPU 告警这种时间模式也纳入降噪范围。五、总结本文探讨了 AI 技术在性能工程中的应用方案。AI 的引入不是为了替代工程师的判断而是为工程师提供更高效的工具和更全面的视角。关键是将 AI 的分析结果与工程师的经验形成互补闭环——AI 负责发现模式工程师负责验证和决策。