去年Q4我们拉了一组MTTR数据,发现一个反直觉的事实:排障本身不慢——根因定位后的修复动作平均只要8分钟。但从告警响起到找到根因,平均要花18分钟,占MTTR的45%。

这18分钟不是在修问题,是在做三件事:切到ES查日志、切到Zabbix看曲线、切到Git查最近谁改过配置——在四套系统之间反复横跳,手动拼凑信息。

这就是我们决定把告警分析交给AI的原因:不是AI比人聪明,是多源数据关联这件事,机器的速度和全面性确实比人高

一、落地前的三个关键设计决策

决策1:AI不是"接个API就行",上下文决定了分析质量

第一次试水,我们直接把告警标题丢给ChatGPT API,让它分析根因。结果:它说"可能是高并发导致"——但实际根因是3小时前的Nginx配置变更。ChatGPT不知道有这次变更,因为我们没告诉它。

关键认识:AI分析质量不取决于模型本身(GPT-4/Claude/DeepSeek都够用),取决于你塞进Prompt里的数据完整度。

我们最终确定的四源数据聚合方案:

数据源 内容 时间窗口
Syslog ERROR/WARN日志 前后5分钟
Zabbix CPU/内存/磁盘/网络趋势 前30分钟
Git 配置变更记录 前24小时
CMDB 拓扑依赖关系 实时

四个数据源合并后约8-10K tokens,作为LLM推理的上下文。

决策2:多LLM适配是刚需,不要绑定单一供应商

不同客户对AI部署有不同的合规要求。我们最终在冠服云EMS平台上实现了多LLM兼容:公有云场景用ChatGPT/Claude,国内合规场景用DeepSeek,私有化场景用Ollama本地部署——切换只是改个配置项。

⚠️ 风险提示:用Ollama本地部署时,需评估模型能力和硬件资源。7B/13B模型在运维场景下的分析质量可能与GPT-4有差距,建议用告警数据做A/B测试后再切换。

决策3:AI必须说"不确定",不能编造

上线第一周,有一次告警数据严重不足(监控agent挂了,只拿到告警标题)。AI在没有足够上下文的情况下,用训练语料中最常见的模式编了一个看起来很合理的根因,置信度写了88%——典型的幻觉。

修复:在Prompt System部分加了一条约束——"如果数据不足以判断,明确说明’置信度不足,建议人工排查’。不确定时宁可说’不确定’,不要编造。"加上后,这类幻觉从每周3-4次降到了接近零。

二、多源数据聚合:AI看得见人看不见的关联

核心逻辑:告警触发后,自动从四套系统拉数据,组装成一个结构化的Prompt。

以下是一个简化后的聚合流程:

def aggregate_alert_context(alert_id, host, timestamp):
    return {
        "alert": get_alert_detail(alert_id),
        "syslog": query_es(host, timestamp, window=300, level=["ERROR","WARN"]),
        "metrics": query_zabbix_trends(host, timestamp, window=1800),
        "config_changes": query_git_log(host, since=timestamp-86400),
        "topology": query_cmdb_dependencies(host)
    }

一个真实案例:

告警:Web服务器凌晨3:15 HTTP 5xx突增
Syslog: “connection pool exhausted (max=200, waiting=47)”
Zabbix: TCP连接数 1200→8500
Git: 24h内无配置变更
拓扑:web-01 → app-01 → db-master

AI输出:“根因:数据库连接池耗尽(置信度92%)。Nginx超时是下游故障的连锁反应,非根因。建议:重启应用实例释放连接池 + 临时上调max_connections至500。”

置信度92%,系统自动触发L1修复,28秒完成。

在这里插入图片描述

三、分级执行:不是所有修复都该自动

核心设计原则:低风险自动化提速,高风险审批保安全。

等级 置信度 执行方式 闭环时间 典型场景
L1 ≥85% 全自动执行+事后通知 <30s 重启服务、清理日志、切换备用节点
L2 60-84% 推送建议+脚本,一键确认 <5min 参数调优、配置回滚
L3 <60% 仅推送报告,人工排查+两级审批 视情况 数据库操作、网络架构变更

L1自动执行的关键保障

def execute_l1(ai_result):
    # 幂等性检查 + 脚本存在性验证
    validate_script(ai_result["script"])
    # 创建审计记录
    audit_id = create_audit(ai_result)
    # 执行(30s超时+自动回滚)
    result = run_with_rollback(
        script=ai_result["script"], timeout=30,
        rollback=ai_result.get("rollback")
    )
    # 验证修复效果
    if not verify(ai_result["host"]):
        rollback_and_alert(audit_id)
        return
    notify(f"✅ L1自动修复完成 ({ai_result['confidence']}%)")

⚠️ 风险提示:L1脚本必须满足三个条件:幂等(重复执行不影响结果)、预配回滚脚本、同一告警类型30分钟内最多自动执行1次(冷却期)。首次上线建议全局走L2观察两周。

在这里插入图片描述

四、两个生产踩坑

踩坑1:置信度阈值一刀切

一开始所有告警类型共用一套阈值。结果磁盘清理类告警AI置信度普遍90%+,网络故障类只有60-70%——因为磁盘告警模式简单(数字信号),网络故障根因可能在十几个环节里。

修复:按告警类型分组设置阈值。磁盘/进程类沿用默认,网络/应用性能类的L1阈值提高到92%。调整后L1成功率达94%。

踩坑2:没有冷却期导致重复执行

某次CPU瞬时尖峰(监控脚本自身导致的),AI误判为需要重启Nginx——短时间内Nginx被重启了两次。

修复:加了冷却期机制——同一告警类型30分钟内最多自动执行1次。同时优化了告警的持续时长判断:持续时间<60秒的尖峰不触发自动修复。

五、实际效果

指标 上线前 上线后 变化
MTTR 38 min 14 min ↓63%
人均日处理告警 30条 7条 ↓77%
凌晨告警人工响应 100% 20% ↓80%
L1自动修复成功率 94%
AI幻觉率 <0.5%

⚠️ 数据口径:以上为2026年3-5月生产数据。AI幻觉率指"AI给出高置信度但实际根因错误"的比例。

六、适用边界

这套方案不是银弹,明确不适用的场景:

  • 业务逻辑类故障(如订单金额计算错误)——AI无法从监控数据定位业务Bug
  • 全新类型、无历史参照的故障——AI推断依赖历史模式匹配
  • 安全事件响应——应始终走人工审核通道

本文方案基于冠服云EMS ITOM智能告警模块(V4.9)2026年6月的生产实践编写。多LLM支持、三级分级执行、脚本资产管理为该模块内置能力。不同版本功能可能有变化,请以最新官方信息为准。AI推断结果仅供参考,生产操作前请确认脚本和回滚方案。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐