AIOps 为什么总是"演示很美,上线就废"
运维团队对 AIOps 的态度基本经历了三个阶段:第一阶段是兴奋,看厂商的 PPT 觉得"太牛了,以后不用半夜爬起来看告警了";第二阶段是怀疑,买了平台用了三个月发现误报比真报还多;第三阶段是放弃,“还是老老实实写规则吧”。
AIOps 落地难的核心原因不是算法不行,而是数据基础太差。你要做异常检测,首先得有标准化的指标数据;你要做根因分析,首先得有结构化的日志和完整的调用链;你要做故障预测,首先得有足够的历史故障样本。大多数企业的运维数据现状是:监控系统有三四套、日志格式五花八门、CMDB 里的数据半年没人更新。
所以 AIOps 的正确打开方式不是"先买平台",而是"先解决一个具体问题"。本文用一个实际场景——故障根因分析——来拆解 AIOps 怎么从一个 demo 变成一个真正能用的工具。
场景定义:故障发生后的黄金 30 分钟
运维最怕的不是故障本身,而是故障发生后找不到原因。一个典型的故障排查过程是这样的:
- 收到告警:用户反馈页面打不开 / 监控系统报 5xx 错误率飙升
- 看监控面板:CPU 高不高?内存有没有 OOM?网络有没有丢包?
- 翻日志:哪个服务报错了?错误堆栈是什么?上游调用是谁?
- 查变更:最近有没有发版?有没有改配置?有没有改网络策略?
- 拉人:叫开发、叫 DBA、叫网络,开紧急会议
- 定位:花了 40 分钟终于发现是某个 SQL 慢查询导致连接池耗尽
整个过程耗时 30-60 分钟,其中大部分时间在信息收集和关联分析上。如果能把这个环节自动化,故障恢复时间可以缩短到 10 分钟以内。
这就是大模型在 AIOps 中的切入点:不是替代运维工程师做决策,而是帮他快速收集、关联和总结信息。
技术选型:为什么选 Dify
做 AIOps 的 workflow 编排,有几个选择:
| 工具 | 优势 | 劣势 |
|---|---|---|
| 自研 Python 脚本 | 完全可控 | 维护成本高,不易扩展 |
| n8n / Make | 开源,集成丰富 | 对 AI 能力支持弱 |
| Dify | AI 原生,工作流可视化,支持 RAG | 复杂逻辑表达能力有限 |
| LangChain / LangGraph | 灵活度最高 | 开发成本高,需要写代码 |
选 Dify 的理由:
- AI 原生:内置 Prompt 模板、RAG、Agent 等能力,不需要自己封装
- 可视化工作流:运维团队的人不一定懂代码,但能看懂流程图
- API 驱动:所有功能都有 API,可以被监控系统触发
- 开源免费:Docker 一键部署,不需要买商业版
部署 Dify 很简单:
| |
方案设计:三层架构
整个方案分为三层:
| |
数据层:把运维数据准备好
这是最耗时的环节,但也是最重要的。
1. 监控数据(Prometheus)
需要一个 API 接口,能根据时间范围查询告警和指标:
| |
2. 日志数据(ELK)
日志需要结构化。如果日志是纯文本,大模型也能处理,但结构化日志(JSON 格式)效果更好。关键字段:
| |
3. 变更记录(CMDB / GitOps)
最近的代码发布、配置变更、基础设施变更。可以是简单的 JSON:
| |
编排层:Dify 工作流设计
在 Dify 中创建一个 Chatflow(对话工作流),包含以下节点:
节点 1:告警触发(Start)
输入参数:
alert_name:告警名称service_name:服务名称alert_time:告警时间severity:严重程度
节点 2:上下文收集(HTTP 请求节点)
并行调用三个 API:
| |
ELK 查询示例:
| |
节点 3:信息聚合(代码节点)
把三个 API 的返回结果拼接成结构化的上下文文本:
| |
节点 4:根因推理(LLM 节点)
这是核心节点。Prompt 设计决定了大模型的分析质量:
| |
节点 5:报告输出(End)
把大模型的分析结果格式化输出,推送到企业微信或飞书。
交互层:让运维工程师用起来
方式 1:告警自动触发
监控系统(Prometheus Alertmanager)配置 Webhook,当触发 critical 级别告警时自动调用 Dify API:
| |
方式 2:手动查询
运维工程师在 Dify 的 Web 界面输入服务名称或错误信息,手动触发分析流程。
方式 3:对话式排查
把 Dify 配置为 Agent 模式,支持多轮对话。运维工程师可以追问:
“帮我查一下 order-service 在过去 1 小时内有没有慢 SQL” “这个 traceId 的完整调用链是什么” “上次出现类似故障是什么时候,怎么解决的”
实际效果和优化过程
第一版:直接让大模型分析日志
把原始日志扔给大模型,让它分析。结果:
❌ 日志太长:一次故障可能有几百条日志,超过上下文窗口 ❌ 噪音太多:大量重复的日志模式,大模型被无关信息干扰 ❌ 分析太慢:调用一次需要 20-30 秒,故障场景下不可接受
第二版:日志预处理 + 结构化
在送入大模型之前做预处理:
| |
预处理后,送入大模型的数据量从 50 条原始日志缩减为 10 种错误模式 + 10 条代表性日志 + 统计摘要。
✅ 效果:分析时间从 25 秒降到 8 秒,分析质量反而提升了(噪音减少了)
第三版:加入历史故障知识库(RAG)
把过去一年的故障处理记录整理成知识库,灌入 Dify 的 RAG 系统:
| |
当新故障发生时,大模型会先检索知识库,找到历史相似案例,结合当前数据给出分析。
✅ 效果:对于重复出现的故障模式,分析准确率大幅提升,而且能直接给出"上次是怎么修的"
效果数据
上线三个月后的实际数据:
| 指标 | 上线前 | 上线后 | 变化 |
|---|---|---|---|
| 故障平均定位时间(MTTD) | 35 分钟 | 12 分钟 | -66% |
| 故障平均恢复时间(MTTR) | 58 分钟 | 28 分钟 | -52% |
| 运维人员参与度 | 全程手动 | 审核确认为主 | 工作量 -60% |
| 误报率 | N/A | 18% | 可接受 |
注意:这个数据不代表"运维工程师可以少一半"。实际效果是:
- 简单故障(已知模式):大模型分析基本准确,运维工程师审核后直接按建议修复,省了排查时间
- 复杂故障(未知模式):大模型提供的上下文收集和初步分析有价值,但最终决策还是靠人
- 18% 的误报主要来自:日志信息不充分时的"瞎猜"、大模型把不相关的变更记录和故障强行关联
踩过的坑
❌ 不要让大模型直接操作生产环境:大模型给出的修复建议必须经过人工确认。曾经出现过大模型建议"重启数据库"的情况——如果只是重启一个 Pod 还好,重启数据库集群那就是事故了。
❌ 日志质量决定上限:如果日志里连 traceId 都没有,大模型也没法做调用链分析。在搞 AIOps 之前,先把日志规范做好。
❌ Prompt 工程是持续的活:第一版 Prompt 的分析质量很差,调了十几版才到可用水平。关键技巧是:给大模型明确的角色定义、清晰的分析框架、和足够的上下文。
❌ RAG 知识库需要维护:故障案例库如果不持续更新,半年后就没用了。需要建立机制:每次故障处理完后,运维工程师把处理过程写成案例入库。
写在最后
AIOps 不是银弹,但大模型确实给运维带来了新的可能性。关键不是追求"全自动化",而是把大模型用在信息收集和关联分析这个最耗时、最适合 AI 的环节上。
几个实操建议:
- 从一个场景开始:不要上来就搞"全面 AIOps",先做一个故障根因分析,跑通了再扩展
- 数据质量是前提:日志规范、CMDB 准确性、监控覆盖率——这些基础没打好,AI 再强也没用
- 人工审核不可少:大模型的分析结果必须经过运维工程师确认,尤其是在执行修复操作时
- 持续优化 Prompt 和知识库:这不是一次性的项目,而是需要持续投入的能力建设
AIOps 的终极目标不是取代运维工程师,而是让运维工程师在凌晨三点收到告警时,打开手机就能看到一份初步的故障分析报告,而不是对着满屏的日志发呆。