【AIOps】基于Prometheus+Loki +Dify构建故障根因分析智能体
前言
在数字化转型的浪潮下,系统规模的指数级增长、多层级架构的耦合性以及数据流的动态性,使得故障的快速定位与根因分析成为运维领域的核心挑战。传统的人工排查方法高度依赖专家经验,效率低下且难以应对海量数据与实时性需求。在此背景下,融合机器学习、知识图谱与因果推理的故障根因分析智能体应运而生,为智能化运维提供了解决方案。故障根因分析智能体通过整合多源异构数据(如日志、指标),结合时序分析与动态因果推理技术,构建多维故障关联图谱,实现从“症状感知”到“根因定位”的跨层级推理。
本文基于开源LLMOps平台 Dify
通过一个“从应用日志出现报错到实时资源指标分析,再到故障定位输出报告”的简单例子,展示故障根因分析智能体的工作过程。
工作流程:
收到告警信息后用户点击根因分析-->告警事件id发送至 webhook
-->webhook
将告警内容及其标签发送到 dify
-->LLM使用“日志查询工作流”获取日志告警内容-->LLM使用“资源列表查询工作流”获取所在项目的所有资源信息-->LLM使用“实时指标查询工作流”获取实时资源指标-->分析故障原因,整理根因分析报告发送至钉钉机器人
流程图:
对于不同资源的关联:
这里是通过标签(label
)将日志资源和监控资源关联起来,所以对标签的定义很重要,在建设可观测平台的过程中需要保持标签的一致性,以下是在这次测试中定义的标签。
数据源类型 | service_log | Node_exporter | MySQL_exporter |
---|---|---|---|
region | 华南区域 | 华南区域 | 华南区域 |
zone | 广州数据中心一区 | 广州数据中心一区 | 广州数据中心一区 |
project | XX项目 | XX项目 | XX项目 |
env | 测试环境 | 测试环境 | 测试环境 |
job | service_log | linux | mysql |
host_ip | IP1 | IP1 | IP2 |
log_type | 应用日志 | × | × |
service_name | XX后端 | × | × |
mysql_name | × | × | XX数据库 |
host_name | × | XX应用服务器 | XX数据库服务器 |
当故障发生时,可以从日志中获取region、zone、project、env标签,后通过PromQL查询项目的资源列表,反之同样成立。
1. 创建日志查询工作流
- 通过工作流可以查询告警的实时日志内容
2. 创建资源列表查询工作流
- 通过工作流可以查询所有资源列表,比如“查询该项目的所有主机信息”
3. 创建实时指标查询工作流
- 通过工作流查询当前资源信息,比如查询“服务器指标”则输出当前的CPU使用率、内存使用率、磁盘使用率、主机负载、文件句柄数、网卡流量等。
4. 创建钉钉输出工作流
- 用于发送根因分析报告到钉钉群聊
5. 创建根因分析 Agent
- 提示词
# 角色
你是一名故障分析专家,将接收到的告警信息通过合理的使用工具分析故障原因,不要捏造数据
# 工作步骤
1. 对接收到的信息进行拆解,记录下标签
2. 使用 log_query 获取实时故障日志内容,values里为日志内容
3. 通过日志分析可能引起故障的原因
4. 使用 resource_list 工具查询这个项目下的相关资源,获取完整标签。
5. 使用 resource_query 获取需要的指标
6. 总结故障的原因
7. 使用 dingding 输出,以Markdown格式输出结果
# 排版要求:
1. 标题(h2大小)
分割线
2. 故障现象(h3大小):故障内容、故障分析
分割线
3. 资源检查(h3大小)
分割线
4. 故障原因(h3大小)
分割线
5. 恢复措施(h3大小)
分割线
6. 总结(h3大小)
根因分析工作过程
-
故障发生,群聊收到故障告警信息,点击“根因分析”开始进入根因分析工作
-
点击根因分析后,Dify 故障根因分析Agent收到根因分析请求及其告警内容
-
通过 log_query 工作流获取到了告警实时日志内容
LLM 在获取日志内容后进行推理分析,推理可能与MySQL资源有关
-
通过 resource_list 工作流获取到该项目所有MySQL资源信息以及完整标签
-
通过 resource_query 工作流获取 MySQL 实时资源指标
-
总结分析结果,并通过钉钉发送根因分析报告
-
报告输出
文章最后,本文案例也只是"先立靶子再打枪",在日常工作中遇到的故障问题千式百样,想让根因分析智能体足够“智能”,还需更加完善的提示词、更加全面的工作流以及更多维度的监控方式,根因分析智能体的建设是个长期且持续的过程。