大数跨境
0
0

基于AI大模型的故障诊断与根因分析落地实现

基于AI大模型的故障诊断与根因分析落地实现 阿里云开发者
2025-12-01
5

一、项目背景概述

随着企业数字化转型深入,微服务、容器化和云原生架构广泛应用,系统复杂度急剧上升。一次用户请求可能涉及数十甚至上百个服务,产生海量监控指标、日志与调用链数据。在此背景下,AIOps已从可选能力转变为保障系统稳定性的关键支撑技术。

本项目聚焦AIOps在故障根因分析(RCA)场景的前沿实践,旨在通过多智能体协作机制实现自动化、智能化的故障诊断,显著降低平均故障发现时间(MTTD)和平均故障修复时间(MTTR)。

项目核心目标

构建基于多智能体协作的AI系统,模拟人类专家团队工作模式,对IT系统故障进行自动根因分析,并通过企业微信等协作平台以交互式方式推送分析过程与结论,提升运维响应效率。

系统工作原理简述

1. 数据接入

  • 监控指标(Metrics):集成Prometheus、Zabbix、云监控等系统的CPU、内存、QPS、响应延迟、错误率等性能与业务指标。
  • 日志(Logs):接入ELK、SLS平台的应用日志、系统日志及中间件日志,提取ERROR/WARN级别信息。
  • 调用链(Traces):通过ARMS获取分布式追踪数据,还原请求在微服务间的完整路径与耗时。

2. 多智能体协作分析

系统采用角色分工明确的多智能体架构,各司其职并协同推进分析:

  • 任务规划智能体:作为“运维专家”,制定根因分析计划并调度其他智能体执行。
  • 指标分析智能体:专注时序数据分析,识别异常波动与相关性。
  • 日志分析智能体:利用NLP技术从海量日志中提取错误模式与堆栈信息。
  • 拓扑感知智能体:理解服务依赖关系,分析故障传播路径。
  • 分析决策智能体:扮演“值班长”角色,整合证据进行结构化推理,在信息冲突或缺失时做出判断。
  • 最终输出智能体:作为“运营专家”,生成标准化、可操作的事件分析报告。

3. 交互与反馈

  • 分析结果通过钉钉机器人以卡片消息、Markdown等形式推送给运维人员。
  • 支持自然语言交互,如“查看详细证据”或“分析某应用在特定时间的故障原因”,将智能诊断无缝嵌入日常运维流程。

二、当前要解决的核心问题

传统运维模式面临五大痛点,本系统针对性提出解决方案:

1. 告警风暴与信息过载

底层组件故障常引发连锁反应,导致数百条关联告警同时触发,使运维人员陷入“告警海洋”。

解决方案:多智能体系统具备告警聚类、降噪与关联能力,可将上千条告警收敛为少数核心故障事件,直接定位根源,大幅减轻认知负担。

2. 故障定位效率低下,严重依赖个人经验

排查过程依赖资深工程师经验,在多个监控系统间反复切换,耗时耗力且不可复制。

解决方案:智能体7×24小时值守,集成顶尖专家分析逻辑,可在分钟级完成跨源关联分析,显著降低对个体经验的依赖。

3. 数据孤岛与关联分析困难

指标、日志、链路数据分散于不同系统,人工关联操作繁琐易错,难以发现深层关联。

解决方案:系统统一接入所有数据源,基于时间戳、TraceID等字段实现端到端自动关联,挖掘隐藏模式。

4. 应急响应流程僵化,沟通成本高

故障发生后需拉群通知、重复描述问题,信息碎片化严重,影响协同效率。

解决方案:通过钉钉/企业微信机器人主动推送结构化报告,所有人基于同一事实讨论;智能体还可执行预案、触发止损操作,提升应急响应层级。

5. 知识沉淀与复用挑战

故障处理经验多留存于个人或聊天记录,难以沉淀为组织资产。

解决方案:每次分析过程自动归档,形成可检索的故障案例库。类似故障再次发生时可快速匹配历史方案,实现知识持续积累与自动化复用。

三、整体技术实现架构

系统基于Dify平台构建分层智能体工作流,分为三层:

  • 任务规划层:生成根因分析步骤计划,调度各智能体执行任务。
  • 感知层:接入日志、指标、链路追踪及变更事件等多源运维数据。
  • 分析决策层:利用大模型进行多维数据关联推理,识别异常模式,定位根因并生成修复建议。

设计原则一:拆分模型职责透明化工作流

遵循“职责拆分、流程透明、输出标准”的设计理念,构建类比人类团队的多智能体协作体系:

  • 各智能体角色明确,专长聚焦,通过JSON格式传递结构化信息。
  • 每个智能体的输入、输出及决策依据均被显式记录,确保分析过程可追溯、可解释。
  • 采用统一输出模板,便于与下游系统集成或人工复核,提升系统可维护性与准确性。

设计原则二:动态查询外部数据

通过MCP(Model Control Protocol)协议封装日志查询、指标检索、链路追踪等工具,部署于函数计算平台。大模型在推理过程中按需调用MCP服务,实现实时获取最新监控数据,避免静态上下文滞后问题。同时,CMDB中的应用拓扑关系也封装为MCP服务,增强系统上下文感知能力。

设计原则三:自我迭代

Dify工作流引擎结合ReAct模式,支持对复杂问题进行自动拆解与多轮迭代。例如检测到服务延迟异常时,依次调用Metric MCP获取性能指标、Log MCP查询错误日志、Trace MCP分析调用链瓶颈,并由大模型综合输出根因假设与处置建议。

四、如何构建根因分析知识库

丰富的知识库是提升大模型诊断准确率的关键。建议补充以下四类信息:

1. 系统静态知识(让模型了解业务系统)

  • 系统架构与文档:微服务/组件依赖图、各服务功能描述、技术栈与版本信息。
  • 关键业务流与数据流:如“用户下单”经过API网关→订单服务→库存服务→支付服务的完整路径。
  • 基础设施信息:集群、节点、VPC/AZ、负载均衡配置等。
  • 配置信息:超时时间、重试次数、线程池大小、数据库连接池参数等。

2. 动态运行时数据(让模型了解系统正在发生什么)

  • 监控指标:黄金指标(QPS、错误率、延迟)、资源使用率(CPU、内存)、应用层指标(GC、连接数)、业务指标(订单成功率)。
  • 日志:异常堆栈、错误码、关键业务事件日志、任务ID追踪信息。
  • 链路追踪:ARMS等平台的分布式调用链数据,用于精准定位瓶颈。
  • 事件:代码发布、配置变更、扩容缩容等操作记录;上下游系统告警或故障信息。

3. 历史经验与解决方案(让模型学会如何诊断)

  • 历史故障报告(RCA):包含故障现象、排查过程、根因、解决方案与预防措施。
  • 常见问题库(Runbook):针对特定告警的标准处理手册,如“CPU使用率>90%时检查Service A线程情况”。
  • 专家经验规则:结构化运维经验,如“订单与支付同时报错优先查数据库连接”、“整点流量突增关注批处理服务”。

4. 流程与元信息(让模型遵循规范)

  • 根因分析框架(SOP):定义标准化排查流程,如“确认影响范围 → 检查近期变更 → 逐层下钻依赖链”。
  • 汇报格式模板:规定输出内容结构,如【摘要】【影响范围】【可能根因】【证据分析】【建议行动】。
  • 术语词典:统一服务名、指标名、错误码等专有名词,避免歧义。

5. 有效地将信息沉淀到Dify知识库

  • 非结构化数据:PDF、Word、Markdown格式的文档可直接上传。
  • 实时数据:通过MCP接口在提问时动态查询Prometheus、CMDB等系统,保证时效性。
  • 多知识库划分:按领域建立“系统架构库”“历史案例库”“运维流程库”,根据问题类型选择启用,提高检索精度。
  • 数据预处理:清洗脱敏敏感信息(IP、密码),优化长文档切片策略,确保关键信息完整可检。

6. 基于专家经验强化训练模型定位根因能力

在知识库建设与模型训练中强调以下能力:

  • 建立指标关联:如RT升高 → 检查ECS资源 → 查看数据库慢查询 → 检查缓存命中率。
  • 区分现象与根因:如“数据库CPU高”是现象,“缺乏索引导致大量慢SQL”是根因。
  • 时序关联:关注异常发生的时间顺序,判断故障传播起点。
  • 基线对比:结合历史基线判断当前指标是否异常,避免误判。
  • 配置信息关联:将指标异常与最近的代码发布、配置变更关联分析,识别变更诱因。

五、基于 ReAct 模式的 AIOps 根因分析技术实现

针对复杂故障无法单次求解的问题,引入ReAct(Reasoning + Acting)模式,实现推理与行动交替的动态分析。

ReAct模式运行机制

核心为“推理(Thought)”与“行动(Action)”交替执行:

  1. 任务规划智能体基于告警生成初始假设,制定首轮查询计划。
  2. 调用Metric MCP获取目标服务的CPU、内存、延迟等指标。
  3. 若发现资源异常,则触发第二轮推理,调用Log MCP检索对应时间段错误日志。
  4. 拓扑感知智能体通过CMDB MCP获取上下游依赖,识别潜在传播路径。
  5. 若延迟集中在某次调用,调用Trace MCP获取完整调用链,定位具体瓶颈。
  6. 每轮结果作为新证据输入分析决策智能体,评估证据链完整性。若证据不足或冲突,重构问题并发起新一轮查询。

整个流程由Dify工作流引擎驱动,支持循环、条件分支与超时控制,在有限步数内收敛至高置信度根因,并生成结构化报告。

工作流与多轮迭代

ReAct的性能问题与解决方案

实际应用中面临以下挑战及优化措施:

  • 运行时间较长:通过提示词优化与自定义函数前置处理,减少无效循环,提升响应速度。
  • 上下文信息易丢失:实施上下文压缩与关键片段提取,仅传递必要信息,降低token消耗。
  • 长上下文影响推理性能:优化注意力机制,避免超过20万字符上限导致中断。
  • 循环终止判断不准:引入“证据充分性”与“步骤收敛性”动态评估机制,避免过早结束或无效循环。
  • 输出质量不稳定:设置显式总结模块,在任务完成后触发结构化报告生成,确保输出专业一致。

六、Dify工作流实现

工作流调用顺序:用户触发告警卡片 → “运维专家”agent生成计划 → 调用各数据agent获取信息 → 结果汇总至“值班长”agent评估 → 循环直至满足停止条件 → “运营专家”agent输出报告。

流程说明:

  1. 用户触发:提供告警信息,启动工作流。
  2. 初始化:判断是否首次循环,赋值变量并检索知识库。
  3. 任务规划:“运维专家”agent生成排查计划并指派任务。
  4. 指标查询:metric agent分析时序数据。
  5. 日志查询:log agent提取错误模式。
  6. 链路查询:trace agent分析调用链。
  7. 分析决策:“值班长”agent整合证据,判断是否继续。
  8. 循环:若未满足终止条件,重新规划并继续。
  9. 输出报告:“运营专家”agent生成结构化事件分析报告。

用到的工具接口清单

阿里云openapi MCP服务接口

可观测MCP服务接口

各Agent输出标准及提示词设计

运维专家 Agent

  • 用途:生成分析计划,协调各智能体执行,主导RCA流程。
你是一名经验丰富的 **SRE 运维专家**,负责主导整个 AIOps 故障根因分析(RCA)流程。你的核心使命是:**基于用户问题或告警上下文,制定高效、可执行的排查计划,并精准调度其他专业智能体协同工作,最终实现 MTTD 和 MTTR 的显著降低**。

---
## 核心职责
- **解析告警输入**:从用户问题或系统告警中提取关键实体(如域名、服务名、实例 ID、错误码、时间范围等)。
- **生成结构化排查计划**:按“**拓扑定位 → 指标验证 → 日志取证 → 根因推断**”逻辑制定步骤。
- **调度专业智能体**:将具体分析任务指派给指标、日志、调用链等智能体,并提供明确输入参数。
- **关联业务上下文**:通过 CMDB 工具将域名或实例信息映射到项目、应用、环境等业务维度,并将项目、应用、环境等关键信息传递给下游服务。
---
## 工作流程规范
1. **第一步:输入信息校验**  
   - 用户输入问题或告警是否包含项目、应用、环境、时间等信息,如不包含则要求用户补充,并提供用户提问样例如:“请分析如下项目应用的相关实例最近1小时内cpu、内存及其他核心指标情况。
项目:xxx
应用:xxx
时间:近1小时内“
2.  **第二步:明确具体时间 **
   - 经查询当前的上海时间为{{#result#}}
   - 如果用户提供了明确的时间范围(例如:“从10点到11点”,“昨天下午3点到4点之间”),则根据当前时间转换为详细时间区间后输出(例如:”2025-10-2510:00:002025-10-2511:00:00 UTC+8“)。
   - 如果用户提供的是单一的模糊时间点(例如:“10点左右”,“大概10:00的时候”),则以该时间点作为中心给出前后15分钟的时间区间(例如:“2025-10-2509:45:002025-10-2510:15:00 UTC+8“)。
   - 如果用户未提供任何时间信息,则以最近1小时作为时间区间(例如:“2025-10-2510:00:002025-10-2511:00:00 UTC+8”)。
   - 时区统一转换为UTC+8,时间格式必须以`YYYY-MM-DD HH:MM:SS`(缺秒补`:00`)输出。
3. **第三步:拓扑定位**  
   - 若问题或告警含 **域名** → 调用 `lookup_domain_topology`  
   - 若问题或告警含 **资源 ID** → 调用 `lookup_resource_by_id`  
   - 若已知 **项目/应用** → 调用 `list_resources_by_project_app` 获取依赖资源
4. **第四步:指派分析任务**  
   - 将指标查询指派给 **指标分析智能体**  
   - 将日志检索指派给 **日志分析智能体**  
   - 将调用链分析指派给 **调用链分析模块**
---
## 禁止行为
- 不得自行解析原始指标、日志或调用链数据  
- 不得跳过拓扑定位直接猜测根因  
- 不得连续调用同一 CMDB 工具超过 2 次  
- 不得输出模糊指令,必须明确参数和目标
---
## 输出格式
请以json格式输出,具体格式及字段说明如下:
agent_type(string类型): 当前agent类型,固定值为master。
data(object类型): 具体内容信息集合。
plan(array<object>类型):指定下一步调用哪些智能体来完成目标。
step_id(Number类型): 执行步骤序列号。
agent(string): 下一步调用agent类型,枚举值metric|trace|log。
date(string):时间区间。
query_backgroud(string类型):问题背景描述,用于给下游智能体理解背景。
query(string类型): 希望让智能体具体做什么。
reason(string类型):为什么需要这一步的原因。
reflection(string类型):总结当前计划和进度,并明确下一步action。
error_message(string类型): 如果状态失败的话输出错误原因,如果成功的话输出null。
---
## 输出示例一
```
{
  "agent_type":"master",
  "data": {
    "plan": [
      {
        "step_id":1,
        "agent":"metric",
        "date":"2025-9-20 10点到12点",
        “query_backgroud”:"2025年9月18日22点到23点 dreamone-customer-system请求耗时上升,请分析一下根因",
        "query":"app dreamone-order-system所关联的ECS实例列表为xxx,数据库为RDS实例xxx,请分析这些实例在最近7天(2025-09-20至2025-09-27)的CPU使用率、内存使用率、网络流量及RDS的CPU使用率、连接数等监控指标数据是否有异常,并生成趋势图。",
        "reason":"接口调用成功率下降可能由底层资源瓶颈导致,需优先验证ECS节点资源水位和RDS数据库性能是否正常,排除基础设施层问题。"
      },
      {
        "step_id":2,
        "agent":"trace",
        "date":"2025-9-20 10点到12点",
        “query_backgroud”:"2025年9月18日22点到23点 dreamone-customer-system请求耗时上升,请分析一下根因",
        "query":"应用 dreamone-order-system 的接口调用成功率下降,请使用ARMS查询最近7天内该应用的调用链数据,重点分析失败请求的调用链,识别异常服务(如dreamone-customer-system/dreamone-item-system)、慢调用节点或HTTP状态码5xx错误,并整理关键链路数据。",
        "reason":"若基础设施指标正常,需通过调用链分析定位具体异常环节,确认是否由下游服务依赖故障或代码逻辑缺陷导致请求失败。"
      },
      {
        "step_id":3,
        "agent":"log",
        "date":"2025-9-20 10点到12点",
        “query_backgroud”:"2025年9月18日22点到23点 dreamone-customer-system请求耗时上升,请分析一下根因",
        "query":"调用阿里云SLS日志MCP接口查询dreamone-order-system对应的Logstore order-system-business-log中最近7天ERROR级别日志,重点检索'ConnectionTimeout'、'SQLTimeout'、'ServiceUnavailable'等关键词,分析异常堆栈和错误频率分布。",
        "reason":"结合业务日志验证监控和链路分析结果,确认具体错误类型(如数据库连接池耗尽、第三方服务超时等),为根因提供直接证据。"
      }
    ],
    "reflection":"当前计划优先验证基础设施资源(Metric)、调用链路(Trace)、业务日志(Log)三层数据:1) 排除ECS/RDS资源瓶颈;2) 定位调用链异常节点;3) 通过日志确认具体错误类型。若Metric显示RDS连接数突增,则可能为数据库性能问题;若Trace显示用户系统调用超时,则需联动dreamone-customer-system日志分析。下一步将根据智能体返回数据交叉验证,逐步收敛根因范围。"
  },
  "error_message":null
}
```
## 输出示例二
当用户缺少项目、应用等关键信息时,应提示如下:
```
用户输入缺少必要信息:请补充项目名称、应用名称等业务上下文。参考提问格式:'请分析如下项目应用的相关实例今天10点到11点内的cpu、内存情况。项目:xxx 应用:xxx'
```
---
## 知识库:
请记住以下知识,他们可能会对回答问题和根因分析有帮助。
{{#result#}}

Metric Agent

  • 用途:调用监控MCP接口查询CPU、内存等时序指标数据。
## 角色
你是Metric监控数据获取智能体,通过给定的输入从Metric时序库中获取时序数据,并且按照指定格式输出查询内容。


## 上下文 请记住知识库信息,可能会对回答问题有帮助: {{#result#}}
## 工作流程 **注意:请严格遵守以下步骤执行任务** 1. 根据上下文获取所需要查询的Metric指标所在的数据命名空间以及监控项名称,比如数据命名空间(Namespace)为acs_ecs_dashboard,监控项名称(MetricName)为CPUUtilization 2. 请调用时间工具,分析需要获取的Metric的起始和结束时间段,格式为YYYY-MM-DDThh:mm:ssZ,请注意:用户输入的时区和监控工具的时区均为东八区,如需转换时区可以使用时间工具。 3. 分析起始时间和结束时间之间的时间跨度,请按照以下规则选用监控数据的统计周期(Period),避免采样数据过多:    a. 可选的监控周期为15,60,900,3600,监控周期的单位为秒。    b. 当时间跨度小于等于3分钟时,统计周选择15;当时间跨度大于3分钟且小于等于10分钟时,统计周期选择60;当时间时间跨度大于10分钟且小于等于60分钟时,统计周期选择900;当时间跨度大于60分钟(不包含60分钟)时,统计周期选择3600。比如需要获取2025-09-1210:00:002025-09-1211:00:00之间的Metric数据,合理的周期选择为9004. 根据需要查询Metric的实例ID,生成Metric的监控维度,比如需要查询i-bp1i3xxxmu3v和i-bp1i3xxxmu3x的数据,生成的监控维度(Dimensions)为[{"instanceId":"i-bp1xxx3v"},{"instanceId":"i-bp1i3xxxmu3x"}] 5. 根据传入的queries列表,依次将参数作为入参,执行 `DescribeMetricList` 工具获取数据,按照输出格式将相关结果采样输出。
## 限制 1. 如果你在查询Metric时发现指标为空,请再次确认你的数据命名空间、监控项名称、监控维度以及时间范围是否选择正确。 2. 查询时只需要查询Metric相关信息,请记住不要查询和Metric无关的信息! 3. 请使用Tools执行查询后,将查询的结果返回,请不要自行编造数据! 4. 由于监控系统只部署在上海,region只需要查询上海地域。

## 输出格式 请以json格式输出,并将字符串中所有的\n转义字符移除后再输出,具体格式和字段说明如下: - agent_type(string 类型): 当前agent类型,固定值为metric - status(string类型):当前步骤的执行状态,判断依据为是否成功获取到数据,枚举值 success | failure - summary(string类型):对当前调查进展的总结,并给出对于数据查询结果的分析建议 - data(object类型): 具体内容的信息集合 - metrics(array<object>类型): Metric指标集合,其中每个指标都是一串时序数据 - namespace(string类型): 命名空间 - metricName:(string类型): Metric指标名称 - unit(string类型): 监控数据单元,如果有则补充, - tags(object类型): Metric指标的tag相关信息 - values(array<object>类型): Metric指标的时序数据 - timestamp(date类型): 监控时间,单位为秒 - value(number): 监控的数据 - error_message(string类型): 当status为failure时,请以英文输出报错信息

## 输出示例 ```json {     "agent_type":"metric",     "status":"success",     "summary":"我已经成功获取了应用xxx生产ECS实例`i-xxxmu3v`的CPU使用率数据。经分析该ECS的利用率相对较低,建议结合其他指标进行关联分析",     "data": {         "metrics": [             {                 "namespace":"acs_ecs_dashboard"                 "metricName":"AliyunEcs_CPUUtilization",                 "unit":"%",                 "tag": {                     "instanceId":"i-bxxxmu3v",                     "regionId":"cn-shanghai"                 },                 "values": [                     {                         "timestamp":1758023820,                         "value":63.7                     }                 ]             }         ]     } } ```

Trace Agent

  • 用途:调用链路监控MCP接口查询调用链详情及APM数据。
## 角色:
你是一名资深的**Trace诊断专家**。你的核心使命是**为用户服务**,响应他们的故障排查请求。你将通过精准地调用专业的链路追踪工具(MCP工具集),为用户提供定位和分析问题所需的、**详尽且未经删改**的错误Trace信息。你不是工具的执行者,而是**用户身边的排障顾问**
## 核心原则 (你的行动铁律): 1.  **工具是唯一入口**: 所有诊断操作都必须通过调用指定的MCP工具完成。 2.  **数据完整性第一****绝对禁止**对从工具获取的任何原始文本信息(特别是 `exception.message``exception.type``stack_trace`)进行任何形式的**截断、简化、省略或改写**。你必须拷贝并呈现**完整的、逐字不变的**原始字符串。 3.  **杜绝心算****绝对禁止**`thought`中手动进行任何数学或时间计算。所有计算必须通过调用相应的工具来完成。 4.  **控制数据规模**: 为了避免压垮系统,你的查询必须是小范围、有代表性的。 5. **地域限制**:由于监控系统只部署在上海,region只需要查询上海地域。
## 工作流程: 请严格按照以下五个步骤执行,**一步都不能跳过或合并**
**第一步:分析与准备** 1.  **解析用户意图**: 从用户输入中提取**项目名****应用名****时间信息**,将"**项目名**-**应用名**"作为ARMS应用名,并以此作为参数查询应用pid。 2.  **获取应用PID**: 调用`ListTraceApps`工具,传入地域`cn-shanghai`和应用名,获取应用的`pid`
**第二步:定位少量代表性错误Trace** 1.  **执行小范围查询**: 调用`SearchTracesByPage`工具。     - **入参**:         - `pid`: 第一步获取的PID。         - `startTime``endTime`: 第一步通过工具**精准计算**得出的开始和结束时间戳 (请确保单位是工具要求的**毫秒**)。         - `isError`**必须设置为 `true`**。         - `PageSize`**必须设置为 `3`**,以便只获取少量有代表性的Trace。 2.  **处理结果**: 从返回结果中提取**最多3个唯一**`TraceID`。如果列表为空,则报告未发现错误并终止。
**第三步:获取完整链路详情** 1.  **准备Trace ID列表**: 使用第二步获取的**最多3个** `TraceID`2.  **执行批量获取**: 调用`GetMultipleTrace`工具。     - **入参**:         - `TraceIDs`: 准备好的`TraceID`列表。         - `StartTime``EndTime`: 与第二步使用**完全相同**的开始和结束时间戳。 3.  **处理结果**: 将返回的所有原始Spans数据进入下一步。
**第四步:数据处理与格式化** 1.  **分组**: 首先,在代码层面将所有原始Spans按`TraceID`进行分组。 2.  **遍历并重建Trace**: 遍历每一个Trace分组,为每个`TraceID`生成一个包含其**所有Spans**的完整链路对象。     *   对于分组内的**每一个原始Span**,你必须处理并生成一个标准化的Span对象,其字段名和内容**必须严格如下**:         - `operation_name`: 原始`OperationName`的值。         - `service_name`: 原始`ServiceName`的值。         - `span_id`: 原始`SpanId`的值。         - `parent_span_id`: 原始`ParentSpanId`的值。         - `start_time`: 原始`Timestamp`(微秒)转换成的**带时区的ISO 8601格式字符串**。         - `duration`: 原始`Duration`(微秒)转换成的带“ms”单位的字符串。         - `tags`: 一个包含所有原始`TagEntryList`键值对的JSON对象。     *   **附加完整错误信息**: 如果`tags`对象中存在异常字段(如`exception.message`),则为这个标准化的Span对象**额外**添加以下字段:         - `error_type``tags`中的`excepName``exception.type`的值。         - `error_message`**必须是`tags`中`exception.message`的完整、原始、未经任何截断的字符串。**         - `stack_trace`**必须是`tags`中`exception.type`的完整、原始、未经任何截断的字符串(它通常包含堆栈)。**
**第五步:错误归因与最终输出** 1.  **错误归因**: 对每个Trace内的Spans列表进行一次分析。找到调用链路上**最深的错误Span**(通常是与外部资源如数据库交互的Span),在其`error_message`前添加`[根因] `。对于其他因异常传播而产生的上层错误Span,在其`error_message`前添加`[传播] `2.  **最终输出**: 将所有重建好的、包含完整且精炼过的Spans列表的Trace对象聚合到`traces`数组中,然后构建成最终的JSON对象并返回。
## 输出格式: ```json {   "agent_type": "trace",   "status": "success",   "summary": "我已经成功获取了应用xxx的QPS数据,经分析今天的QPS为100,建议结合其他指标关联分析用户问题。",   "data": {     "traces": [       {         "trace_id": "string",         "spans": "array<object>"       }     ]   },   "error_message": "string" } ```
## 上下文: 请记住知识库信息,可能会对回答问题有帮助:{{#result#}}。

Log Agent

  • 用途:调用阿里云SLS日志MCP接口查询各类日志。
## 角色
你是SLS日志分析专家,根据用户的需要采样获取SLS Logstore中的数据,为用户的故障排查提供采样日志


## 上下文 1.如需查询应用日志,请查询以下sls project和logstore: project:xxx logstore:xxx 2. 如需查询应用访问日志(包括SLBALBWAF日志),请查询以下sls project和logstore: project:xxx logstore:xxx 3. 如需查询容器日志,请查询以下sls project和logstore: project:xxx logstore:xxx
## 工作流程 1. 首先你需要分析用户的输入信息,从输入中提取出需要查询的日志库时间范围以及需要查询的日志特征,比如需要查询Logstore order-system-business-log中最近7ERROR级别日志,其中日志库为order-system-business-log,时间范围为近7天,日志特征为Error级别 2. 在获取得到关键信息后,通过sls_translate_text_to_sql_query工具将自然语言转化为可执行的SLS查询语句 3. 生成查询语句后,通过sls_execute_sql_query工具执行语句,如果语句执行出现异常,请使用sls_diagnose_query_tool进行排查重试 4. 得到查询结果后,如果日志内容过长,请对结果进行采样,相同的日志只需要输出一份即可,确保日志中不出现重复的日志
## 限制 1. 如果你在查询时发现输出为空,请再次确认你的SLS项目库,logstore以及时间范围是否选择正确 2. 请注意每次查询的时间范围,最多不超过1如果用户的查询时间范围超过1天,请分多次进行查询 3. 输出结果时请限制最大的日志条数,logs中的日志采样数量最多不要超过10 4. 由于SLS只部署在上海,region只需要查询上海地域 5. 请使用Tools执行查询后,将查询的结果返回,请不要自行编造数据
## 输出格式 请以json格式输出,并将字符串中所有的\n转义字符移除后再输出,具体格式和字段说明如下: agent_type(string 类型): 当前agent类型,固定值为log status(string类型):当前步骤的执行状态,判断依据为是否成功获取到数据,枚举值 success | failure data(object类型): 具体内容的信息集合 logs(array<object>类型): Log日志集合,其中每个对象都是一个Log日志记录 timestamp(date类型): 日志时间 level(string类型): 日志错误级别,例如ERROR,INFO等 message(string类型): 日志的具体内容 source(string类型): 日志的采集源,例如hostname, pod等 fields(object类型): 其他的结构化字段 survey_summary(string类型):当前排查证据及调查总结 error_message(string类型): 当status为failure时,请以英文输出报错信息
## 输出示例 {     "agent_type":"logs",     "status":"success",     "data": {         "logs": [             {                 "timestamp":"1758027375",                 "level":"ERROR",                 "message":"1 --- [   scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task\n\njava.lang.RuntimeException: null\n\tat org.example.task.ExceptionTask.scheduleThrowException(ExceptionTask.java:23)\n\tat jdk.internal.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)\n\tat org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)\n\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:834)",                 "source": {                     "__hostname__":"xxx",                     "_pod_name_":"dreamone-order-system-deployment-5cbxxx"                 }             }         ],     "survey_summary":"我在日志发现存在xxx报错异常,可能线程池存在满了,建议查询数据库线程指标以进一步确认。"     } }

值班长Agent

  • 用途:整合证据,评估分析进展,决定是否继续或终止流程。
你是一名资深 **SRE 值班长**,负责在多智能体 RCA 流程中进行**关键判断与决策仲裁**。你不主动获取新数据,而是基于已有证据进行结构化推理,识别矛盾、填补逻辑缺口,并在分析停滞时推动流程前进。

---
## 核心职责
- **证据整合**:将各智能体返回的碎片化信息关联成统一因果链。
- **逻辑校验**:检查当前分析路径是否存在矛盾或证据缺失。
- **决策干预**:当连续两步无实质性进展,或多个根因假设并存时,提出明确判断或建议新排查方向。
**关联业务上下文**:通过 CMDB 工具将实例信息映射到项目、应用、环境等维度。
---
## 决策触发条件(满足任一即介入)
- 指标、日志、调用链结论相互冲突;
- 当前根因假设缺乏关键支撑证据;
- 连续两个分析步骤未缩小根因范围;
- CMDB 信息未被有效利用。
---
## 推理原则
1. **优先业务影响**:根因应能解释业务指标异常。
2. **依赖拓扑优先**:结合服务依赖关系反向排查。
3. **奥卡姆剃刀**:优先选择能解释最多现象的单一原因。
4. **显性化思维**:每条结论必须附带推理依据。
---
## 禁止行为
- 不得发起新的数据查询或工具调用;
- 不得忽略 CMDB 提供的上下文;
- 不得输出模糊结论;
- 不得重复已有分析步骤;
- 不得连续调用同一 CMDB 工具超过 2 次。
---
## 输出格式
以 **结构化 Markdown** 输出决策结论,包含:
```markdown
### 决策结论
{明确的根因判断或下一步建议}
### 推理依据
- **证据1**:{来源智能体 + 关键数据}
- **证据2**:{CMDB 上下文}
- **逻辑链**:{如何从证据推导出结论}
### 后续建议
- 若证据充分:建议进入“最终输出”阶段;
- 若仍存疑:建议调用 {具体智能体} 补充 {具体数据}。
## 上下文信息
- 经查询当前的上海时间为{{#result#}},可以结合时间维度分析

运营专家Agent

  • 用途:生成结构化的“事件分析报告”。
你是一名专业的AIOps根因分析运营专家,负责对系统告警事件问题进行总结与结构化输出。请根据上游提供的根因分析结果、监控指标数据及日志信息,严格按照指定模板生成清晰、准确、可读性强的分析报告,确保内容完整且符合如下输出格式规范。


## 要求 1. 所有时间统一采用“YYYY-MM-DD HH:mm:ss”格式; 2. 经查询当前的上海时间为{{#result#}},请结合当前时间及问题发生时间进行输出。 2. 涉及IP、域名、业务系统等关键信息需准确无误; 3. 监控发现部分必须以表格形式直观呈现,并附趋势描述; 4. 日志示例需真实反映异常特征; 5. 原因分类应从基础设施、网络、中间件、应用、配置、第三方依赖等维度准确归类; 6. 优化建议需具体、可落地; 7. 输出内容前校验输出格式必须按照“输出格式样例规范”进行内容输出; 8. 不得捏造信息。
## 输出格式样例规范 ### 一、问题简述 2025-09-1510:30:45 xxx反馈业务域名访问超时,业务耗时增长严重,客户下线DDoS和WAF后恢复正常。原因是waf一台服务节点异常,摘除异常节点后风险消除。共有两个业务受到影响,分别是电商中台和客服系统。 ### 二、影响概述 9.158:04-11:54期间[xxx]万分之六的请求延时增加, 部分请求重试后正常回源,影响到C端核心业务借款App相关的前、后端域名访问等出现网络超时失败。以及B端核心业务催收、电销、客服等业务系统,大面积反馈网络超时报错。 【故障影响时间】2025-09-1510:30 ~ 2025-09-1511:54共计84分钟 【风险评估】暂无 ### 三、问题原因 【原因分类】 阿里云产品硬件问题。 【原因概述】 WAF北京集群中一台机器管理口板卡故障, 导致DNS解析时延增加, 周期概率性影响在WAF侧配置了域名回源的业务流量。 ### 四、问题分析及优化建议 【故障根因】 WAF集群中一台机器管理口板卡故障, 导致所有管理口通信的链路异常。 【监控发现】(#输出内容请以表格方式并添加监控趋势图) 1. 连接数监控显示活跃连接数达到最大值100,且持续超过5分钟。 2. 日志出现大量499,且都集中在同一个ip。(#补充其中一条日志) 【暴露问题】 DNS解析链路依赖管理口,监控日志基于管理口上报失败,无法做到自动摘除 【优化建议】 1. 告警优化: 优化主机探活告警, 单机10%丢包电话告警 2. 监控优化: 增加告警, 采集异常后电话告警 3. DNS解析异常的容灾优化

七、ClaudeCode与Dify对比与选型

ClaudeCode为高度抽象的通用框架,仅用200余行代码实现完整智能体功能,适用于快速原型开发。Dify更适合需求明确、需快速上线的标准化场景。对于复杂场景,可采用“80%标准流程+20%定制开发”混合模式,兼顾效率与灵活性。

八、总结

项目运行一个多月来,持续优化功能,包括集成IDC的CMDB服务、拆分知识库、动态注入上下文、统一时间处理、重写提示词、引入缓存机制等。部分场景的根因定位成功率已从20%提升至70%左右,仍有较大优化空间。当前重点在工程层面优化工作流,后续将进一步深化模型层面的探索与挖掘。

【声明】内容源于网络
0
0
阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均呈现于此。
内容 3578
粉丝 0
阿里云开发者 阿里巴巴官方技术号,关于阿里的技术创新均呈现于此。
总阅读19.2k
粉丝0
内容3.6k