资讯动态

Sage AI接入实录:如何将数百条告警收敛为一个根因?

发布时间:2026/9/29 18:14:54 来源:尧图企业网站定制
做运维第九年我手机里最有存在感的群是那个名字带“告警”的企业微信群。平时白天还好一条条点开看也来得及到了后半夜几十上百条告警刷屏的时候你根本分不清哪条是源头、哪条是连带反应。最近我们接入了Bonree ONE·Sage AI故障诊断助手两周实测下来最大的变化是群里再刷屏的时候我们不用手动一个个排查直接它问一句“现在到底什么挂了”它就能把告警收敛、排序、指向根因的完整链路讲清楚。我把这两周从接入到使用的完整过程都记下来了包括踩过的几个坑以及哪些场景它确实好用、哪些场景还不敢全信。1. 我为什么愿意把凌晨3点的告警交给Sage AI1.1 告警疲劳的真相不是缺监控是缺判断我们团队的监控体系其实不差。Prometheus、Zabbix都挂着后来统一用夜莺Nightingale做告警管理服务器、中间件、数据库、应用层都有覆盖。按理说“监控完备”应该让人安心但实际情况恰恰相反告警产生容易收敛极难。一个业务接口超时可能从上到下触发应用层、中间件层、基础设施层几十条规则凌晨两点的企微群瞬间被刷屏。夜莺的告警规则本身很成熟文档里关于数据模型和告警规则的部分讲得很清楚数据模型就是标准的时序模型通过指标名和标签来定位对象告警规则支持PromQL表达式和内置函数。它能解决“什么东西超了阈值”的问题但回答不了“为什么会超”。值班的人面对几百条告警要判断哪条是根因、哪条是连带反应必须同时开着监控大屏、日志系统、链路追踪、任务调度平台来回切换着看。我统计过过去一个季度的情况告警总量里真正需要动手处理的不到15%剩余全是重复告警、已知噪音、上下游联动的次生告警。也就是说监控系统不缺缺的是“判断层”。告警疲劳不是某个团队的问题是整个运维行业被架在火上烤的常态。1.2 Sage AI故障诊断助手是什么用自然语言打通告警与根因Bonree ONE的Sage AI故障诊断助手本质上是给可观测性数据装了一层“语义层”。它不要求你记住每个指标的查询语句、每条告警规则的表达式而是让你直接用自然语言提问。比如在企微群里它问“支付服务最近30分钟成功率下降和数据库慢查询有关系吗影响哪些入口”它自己去查指标库、日志、链路追踪、告警事件然后把结论带证据地给回来。以前这一套流程我得在监控系统、日志平台、APM三个系统之间来回切少说十几分钟现在一句话就能拿到一个带证据链的判断。它照顾的不是精通PromQL和链路追踪的高手而是那些半夜被叫醒、脑子还不太清醒的值班人。这其实是一个非常朴素的需求告警不再是一堆冰冷的数字和规则表达式而是变成“故障说明”。我最初对这个产品是半信半疑的做了技术选型后决定先小范围接入实测跑两周看效果再决定要不要推广。结果两周下来它成了我们值班群里最常用的“同事”。1.3 它适合谁不适合谁先给结论如果你团队只有几十台服务器一天告警不超过十条那上不上Sage AI其实无所谓。但如果你面对的是微服务集群加分布式任务调度每天告警几百条、值班人力又有限这类AI诊断助手就会成为刚需。它是叠加在监控系统之上的“分析师”不是替代监控系统的“新监控”。它的价值在于把“告警”和“根因”之间那段需要靠老师傅经验来跨越的距离用大模型的语义理解能力填上。这段距离恰恰是规则引擎没法解决的。2. 接入实录从企微机器人到数据源打通2.1 数据源接入的先后顺序与字段规范化接入第一步不是配企微而是接数据源。顺序建议是指标、链路、日志、告警事件。为什么这个顺序因为Sage AI要回答“为什么挂”必须在时间线上把“指标异常”“调用链路报错”“日志报错”“告警触发”四类数据对齐。如果一个源没接根因分析就是瘸腿的。我们先把Prometheus和夜莺的指标数据对接到了Bonree ONE再把OpenTelemetry采集的链路数据接进去日志走的是Elasticsearch同步。整体流程不算复杂最耗时的是字段清洗。我们的服务日志里同一个IP有时叫client_ip有时叫src_addr还有的时候缩写成cip。人工看倒无所谓机器做关联就会漏。这里有个经验接入前最好先梳理三张清单——主机IP、服务名、集群名的所有别名写法统一映射。我们花了整整半天把三个环境里几百个服务名对齐这个工作量躲不掉。字段越规范后续根因分析的准确率上限越高。2.2 告警接入把群里的刷屏变成可提问的素材Bonree ONE支持标准的Webhook把告警消息推到企业微信机器人同时也支持在企微群里直接Sage AI提问。接入方式并不复杂关键在告警消息的payload要带足够多的上下文。我见过很多团队做告警推送就推一句话“服务XX异常”连是哪个集群、什么指标、从几点开始都没写这种告警推给谁都是灾难。Bonree ONE推消息时我们配置了完整字段告警名称、告警对象、起始时间、当前值、持续时长、关联标签外加一个告警详情页跳转链接。示意如下{ msgtype: markdown, markdown: { content: 告警名称: DolphinScheduler任务失败\n告警对象: workflow:ods_user_daily\n起始时间: 2025-07-11 02:12:30\n当前值: 任务执行失败(exit_code1)\n持续时长: 12分钟\n关联标签: envprod, clusterdw-cluster\n[查看详情](https://bonree.one/alert/xxx) } }这样Sage AI提问时它能顺着上下文去拉取告警详情、对应指标、相关日志答出来的东西才有依据。如果消息里啥都没有它就真的只能“猜”了AI再强也没办法无中生有。2.3 权限边界AI能看到什么都得提前想清楚接入前团队里最大的顾虑不是效果而是安全。Sage AI能查日志、能翻链路、能看告警相当于给了一个“只读超级管理员”窗口这权限要是失控就麻烦了。实测下来Bonree ONE支持将AI查询权限绑定到具体的用户体系。我们给值班账号只开了生产环境只读权限、告警数据权限、最近7天日志权限配置变更类权限一律不给。而且我强烈建议保留人工审批环节AI负责定位和给出建议最终执行变更必须由人来做。我们团队历史上出过因为自动化误判导致的故障所以在关键变更上坚持“机器建议、人拍板”的原则。这里额外提醒一句接入日志类数据源时要注意数据脱敏。如果日志里有身份证号、密码片段之类的敏感数据Sage AI虽然只用于内部分析但能少暴露就少暴露接入前做一次敏感字段脱敏是必要的。3. 告警降噪实测DolphinScheduler批量失败与LF/CRLF噪音3.1 场景一凌晨的DolphinScheduler调度任务失败风暴有一晚凌晨2点多企微群直接炸了。DolphinScheduler里一个工作流挂了40多个下游任务跟着全部失败告警消息像机关枪一样往外弹。按以前的工作套路值班同事要先随便点开一条失败告警复制任务ID去DolphinScheduler看依赖关系然后一个任务一个任务往上追最后才发现是上游某个数据同步任务挂了根源是一张MySQL实例的binlog增长把磁盘快写满了。整个过程用了大约20分钟。这次我直接在群里Sage AI问了一句“最近一小时dolphinscheduler执行调度任务失败的主要原因是什么影响范围有哪些”它给的结果让我印象很深首要根因是上游任务ods_user_daily因数据库连接池耗尽而失败连带导致31个下游任务超时失败并且给出了故障时间线与binlog容量增长趋势吻合。我们后来人工复核结论完全一致。这40多条告警在Sage AI这里被收敛成1个根因加2个次生风险点不再需要人肉在任务依赖图里逐个排查。这类批量失败场景正是AI诊断最擅长的告警多、关联清晰、依赖关系明确大模型可以顺着调度链路的元数据去聚合比人眼扫列表可靠得多。3.2 场景二Git Unity项目的LF/CRLF告警为什么被自动归档另一个场景更有意思。我们有个Unity项目团队里有人用Windows有人用macOSGit仓库里的文件行尾符一会儿LF一会儿CRLFCI的代码检查任务每次都会弹一堆警告。注意这类告警和运行时故障无关属于代码规范层面的噪音但之前它就是会和业务告警混在一起值班的人看到也只能忽略很干扰判断。Sage AI接入初期同样把这类告警和业务告警丢在一起。后来我做了几次交互反馈具体方式是在提问后顺手标记“这类告警属于已知噪音”大概两三次之后它处理LF/CRLF告警的方式从“混在告警列表里”变成了“自动归入噪音归档”后续只出现在周报的噪音统计里不再进高优列表。这个学习机制比传统规则配置更灵活。传统做法是想办法用正则匹配“LF”或“CRLF”然后写一条静默规则。Sage AI不是靠匹配字面量而是理解了“行尾符差异告警属于代码规范问题不属于运行时故障”这一层语义所以同类问题无论消息怎么变它都能按噪音归类。3.3 降噪结果对比从200条告警到1个根因我把接入前后一个星期的告警数据做了个对比直观感受更明显指标接入前一周接入后一周原始告警总量764条701条人工需要逐条查看的数量764条0条先看AI汇总经AI收敛后的独立问题数无26个其中自动归为噪音频次无12个实际触发人工介入的问题17起3起平均值故障恢复时间MTTR35分钟12分钟这个表格里最亮眼的不是“告警变少了”而是“独立问题数”从上百条变成26个。我们一周内实际上只需要处理3个问题另外3个在早期被AI拦截但根因不明确剩余大部分都是不需要处理的噪音。这里要说明一点告警总量没有明显下降因为原始告警该触发还是触发降噪发生在“呈现层”。但值班人员的时间一下子解放出来了这比纯粹的“墙掉告警”要健康得多。4. 根因定位实测从一句话到证据链4.1 一个安全场景内网横向渗透告警的研判除了业务故障Sage AI在安全告警研判上的表现也超出我预期。某天EDR报了一条“内网横向渗透”高危告警值班同事当时很紧张怕真的被攻击了。传统做法是去终端查进程、查网络连接、查登录日志、再看威胁情报平台这套流程走下来半小时起步而且特别依赖判断经验。这次我们直接把告警抛给了Sage AI原话大致是“内网横向渗透告警src IP 10.x.x.x在凌晨的登录行为和网络连接是否异常是误报还是需要升级”它返回的结论是该主机在同一时间出现来自构建机IP的SSH登录随后有一段短暂的内网探测行为但这些连接的源IP来自一个已经停用的构建缓存节点关联的进程名对应已知的CI清理脚本最终判定为“大概率误报建议人工复核构建机日志”。我们人工验证后确实如此。这个能力在告警研判上价值很大因为安全告警最怕“狼来了”误报积累太多真正的高危告警反而会被当成噪音错过。4.2 一个问题拆开的全过程检索、关联、推理很多人以为AI诊断就是大模型读了告警文本后“猜”一个答案。我实际观察下来不是这么回事Sage AI背后更像一个三步流水线。第一步是检索。它先解析你问题里的时间范围、资源对象、指标名或告警类型然后把这句话拆解成若干个数据查询动作去指标库拉时序曲线去日志系统搜关键字去链路系统查调用关系去告警事件表找相关触发记录。第二步是关联。把检索到的数据按照时间线和调用链对齐找出同一时间段内异常指标、错误日志、链路报错、告警事件之间的对应关系。这个步骤很依赖第一步的数据质量也是为什么字段规范化那么重要的原因。第三步才是推理。把关联后的结构化证据交给大模型生成自然语言结论。注意推理是在证据基础上进行的不是无支撑的生成。所以它的答案才能做到“有理有据”也才能给出置信度。整个链路里最核心的不是大模型有多聪明而是前两步能不能拿到足够多、足够干净的数据。4.3 它怎么保证不胡说证据回溯与置信度大模型的幻觉风险是运维场景落地最大的障碍。你让ChatGPT写一首诗它随便发挥没问题但让它说“哪台服务器导致了故障”胡说八道是会出人命的。我的实测体会是Sage AI在答案里会尽可能把结论挂到证据上每条关键结论旁边都有可下钻的查询链接点进去就是原始指标图表、日志片段、链路视图。这个机制至关重要AI告诉你结论的同时还告诉你结论是从哪里来的。它甚至会在数据不足的时候明确表示“现有数据不足以确认根因”。比强行给结论要可靠得多。另外它在结果里会标注置信度。比如“基于关联到的12条证据判定为数据库连接池耗尽置信度82%”。我自己的判断标准是置信度低于70%的输出我不直接采信而是当作排查线索回到人工流程里继续验证。这一点后面会细说。5. 和自建“夜莺告警规则”这条路线的真实对比5.1 夜莺的数据模型和告警规则解决了什么必须承认夜莺这类开源监控解决了很多问题。它的数据模型是标准的时序模型通过ident、metric、tags来定位监控对象告警规则支持PromQL和内置告警函数可以灵活实现阈值异常、值突增突降、周期环比等常见场景。官方文档里关于数据模型与告警规则的章节我读过不止一遍写得相当简练理念就是“让规则表达指标异常”。这套方案的真实价值在于确定性强、可审计、完全自主可控。你写了一条“cpu usage 80 for 5m”的规则它就是每分钟检查一次触发条件精确到表达式级别不存在任何模糊空间。对于基础设施层的稳定性保障这种确定性是必须的。5.2 开源规则引擎的边界单指标触发与人工串联但夜莺这类规则引擎的边界也很清晰它本质上还是“单指标阈值触发”。即便告警规则支持多条件组合也几乎做不到跨指标、跨日志、跨链路的关联推断。一个请求变慢可能是代码BUG、可能是数据库慢查询、可能是网络抖动也可能是依赖的下游服务被限流这些可能性需要靠人脑去串联。在夜莺体系下做根因分析意味着值班人员要在多个系统之间人工“连点成线”打开告警列表找到触发源点进监控大盘看趋势切到日志平台搜关键字再去APM系统看链路最后到调度平台查依赖任务。这一整套流程完全依赖人的经验对新人极不友好对老人则是体力活。规则引擎可以告诉你“服务器CPU高”但回答不了“这台服务器为什么CPU高”。5.3 Sage AI比自建路线多出的那一层语义关联Sage AI做的事情在自建体系里叫做“AIOps”通常要自己搭告警聚类、日志聚类、指标相关性分析、调用链分析、知识图谱等模块每一个都是工程上的小项目。而Sage AI相当于把这一步直接封装成了一个对话入口。它的核心是把可观测性数据中的语义关系利用起来日志里的异常堆栈、链路里的调用依赖、指标之间的时间相关性、告警事件之间的连带关系大模型能把这些不同形态的数据综合理解给出一个概率化的推断。这种能力用规则引擎堆不出来因为它不是“如果A且B则C”的逻辑而是从海量关联中找到一个概率最大的解释。5.4 什么规模的团队适合上Sage AI回到选型话题我建议做一次“告警量自测”如果一天告警少于10条、业务链路简单、值班压力不大夜莺加企微机器人完全够用多花钱上没有意义。但如果像我们一样每天几百条告警、微服务链路长、定时任务满天飞、值班人力紧张那就值得试一试。这里还要提醒一点Sage AI不是监控替代品它依赖监控数据的完整度。如果你们连日志采集和链路追踪都没做好直接上个AI诊断助手等于让厨师没有食材硬做菜。先把数据基础打牢再让AI在数据上面做分析才是正确顺序。6. 两周转下来的心得哪些坑必须提前避6.1 效果最好的两类场景两周下来效果最突出的场景有明显共性。第一类是批量告警收敛典型代表就是DolphinScheduler任务流失败几十条告警实际指向一个根因AI能顺着依赖关系把它们串起来。第二类是规律性故障定位比如数据库连接池耗尽、慢查询拖垮服务、磁盘容量触顶这类“常见病”日志和指标特征清晰AI定位特别准。这两类场景有一个共同点数据完整、模式常见。只要监控数据齐、故障模式在训练语料里属于常规形态AI的推断就会相当可靠。用大白话说它更像一个记忆力极强的资深值班专家见过的套路都能一眼认出来。6.2 还得靠人的场景但必须泼一盆冷水也有它搞不定的场景。比如一个从未见过的诡异OOM或者某个代码分支改动导致的局部性能问题日志和指标里特征非常模糊。Sage AI能做的更多是给你一个可疑方向列表而不是斩钉截铁的结论。这种时候它给出的输出更像“排查线索”而不是“最终答案”。还有一类场景需要特别注意大促和压测期间的指标本来就剧烈波动告警风暴异常凶猛AI有时会被高频变化带偏给出置信度虚高的结论。我在大促演练时专门测试过发现它在高噪音环境下没有平时稳。所以我的处理原则是置信度低于70%一律回到人工流程不因为“AI说没问题”就放松警惕。6.3 给后来者的三点设置建议第一个建议接入前先做一轮告警规则治理。这不是废话我们刚接入时因为源头的告警规则太毛躁很多垃圾告警也被AI收进来分析白白耗费了计算和注意力。把夜莺和Prometheus里的告警规则先梳理一遍去掉明显无效的阈值规则AI分析的整体质量会明显提升。第二个建议统一关键字段命名。我在前面的接入部分已经强调过服务名、IP、集群名的别名必须统一。Sage AI的关联准确性很大程度取决于字段能不能对应起来如果日志里叫ip链路上叫host_ip指标里叫instance它会花大量算力在“对齐”而不是“分析”上。第三个建议多给它反馈就当带实习生。遇到已知噪音告警就点一下“归为噪音”看到结论准确就给个正向反馈看到置信度虚高就标记一下。这不是客套话因为我实打实看到持续的反馈交互后它对我们环境的理解越来越贴合特别是LF/CRLF这类非典型案例靠的就是反复纠正。最后再分享一个体会也是这两周我印象最深的事。半夜被告警震醒本来就够糟心了但只要能在三分钟内知道是哪台机器、哪个服务、因为什么原因挂了值班压力就会小一大截。现在我的告警处理流程变成了先看Sage AI的结论再做证据确认最后动手处置。它没有完全替代人但确实把我从“告警风暴里捞针”变成了“按图索骥”。如果你们团队也正在被告警刷屏折磨我建议不要急着上全套概念先拉一批历史告警试试它的收敛效果证据比任何讲解都有说服力。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑