使用SPL快速诊断问题根因 -- 错误分析指南

简介: 本内容记录了一次故障排查过程

使用SPL进行诊断前请阅读下面的数据获取文档,确保拥有数据访问权限。

2025 AI 原生编程挑战赛 数据获取文档

本指南介绍如何诊断系统错误问题的根因,通过分析分布式链路追踪数据中的错误模式来定位故障服务。

适用范围:本分析方法专门针对服务调用失败导致的错误问题

对于其他类型的系统故障(如资源瓶颈、网络问题等),需要使用相应的专门分析方法。

本文提到的相关代码保存在下面的链接中,选手可以通过教程运行notebook中的STS_Root_Cause_Analysis_Error.ipynb实现根因诊断。

https://github.com/alibabacloud-observability/tianchi-2025


1. 准备开发环境

1.1 安装基础环境

# 安装Python虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖项  
pip install -r requirements.txt

1.2 配置访问凭证

设置环境变量:

export ALIBABA_CLOUD_ACCESS_KEY_ID="你的AccessKey ID"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="你的AccessKey Secret"

2025.09.22之前上传个人账号的选手,获取的STS角色名为tianchi-user-a。需要设置变量:

export ALIBABA_CLOUD_ROLE_ARN="acs:ram::1672753017899339:role/tianchi-user-a"

2025.09.22到2025.10.09期间,参加比赛并上传个人账号的选手,获取的STS角色名为tianchi-2025-role-1。需要设置变量:

export ALIBABA_CLOUD_ROLE_ARN="acs:ram::1672753017899339:role/tianchi-2025-role-1"

从2025.10.10开始,参加比赛并上传个人账号的选手,获取的STS角色名为tianchi-2025-role-2。需要设置变量:

export ALIBABA_CLOUD_ROLE_ARN="acs:ram::1672753017899339:role/tianchi-2025-role-2"

1.3 启动分析环境

cd notebook
jupyter notebook STS_Root_Cause_Analysis_Error.ipynb

2. 分析流程详解

2.1 环境配置

目标: 设置故障时间段和SLS访问参数

关键参数说明:

  • FAULT_START_TIME/FAULT_END_TIME: 故障时间段,系统出现错误的时间范围
  • PROJECT_NAME: SLS项目名,存储链路追踪数据的项目
  • LOGSTORE_NAME: 日志库名,存储调用段数据的日志库
  • REGION: 地域,SLS服务所在区域

操作步骤:

  1. 根据故障情况修改FAULT_START_TIMEFAULT_END_TIME
  2. 确保时间格式为"YYYY-MM-DD HH:MM:SS"
  3. 验证环境变量配置正确性

输出示例:

FAULT_START_TIME = "2025-08-28 14:20:10"
FAULT_END_TIME = "2025-08-28 14:25:10"

2.2 筛选报错调用段

目标: 创建SLS客户端,找出故障时间段内的根因调用段

操作步骤:

  1. 执行STS凭证获取,确保返回成功
  2. 创建SLS客户端连接
  3. 初始化FindRootCauseSpans分析器
  4. 运行错误调用段筛选,获取错误调用段列表

查询输出示例:

--- 开始执行根因SPAN查找任务 ---
✅ 成功获取访问权限!
✅ SLS客户端已使用临时凭证创建。
[FindRootCauseSpans] 初始化完成。
  开始时间: 2025-08-28 14:20:10 (时间戳: 1756362010)
  结束时间: 2025-08-28 14:25:10 (时间戳: 1756362310)
开始查找根因spans...
proj-xtrace-a46b97cfdc1332238f714864c014a1b-cn-qingdao logstore-tracing cn-qingdao
[FindRootCauseSpans] 查询时间范围: 2025-08-28 14:20:10 ~ 2025-08-28 14:25:10. 查询条件: statusCode>1
总共查询到的span数量: 279
涉及的trace数量: 140
找到 140 个根因span:
1. 9a0e43619466da2b
2. 66d8bb155e71a468
3. ef74d4ca5a57236a
4. 9f56e3bd7373156d
5. 1128ce53854dbaf6
... 还有 135 个
✅ 查询条件已保存,包含 140 个spanId

结果验证: 140个错误调用段数量足够进行有效的模式分析(建议≥20个)

2.3 寻找报错特征 (get_patterns)

目标: 使用get_patterns算子分析错误调用段的共同特征

模式类型分析:

  1. serviceName模式: 直接指向出错的服务
  • 例如: "serviceName"='cart' → cart服务出错
  • 这是最直接和可靠的证据
  1. spanName模式: 指向出错的操作
  • 例如: "spanName"='POST /oteldemo.CartService/GetCart' → cart服务的GetCart操作出错
  • 需要从操作名推理出对应的服务

操作步骤:

  1. 系统自动构建包含所有错误spanID的查询条件
  2. 执行get_patterns查询分析错误特征
  3. 解析查询结果,提取最频繁的错误模式
  4. 按频率排序,识别主要错误特征

输出示例:

执行错误特征分析查询...
错误特征分析结果 (1 条记录):
ret: [["serviceName=cart","serviceName=frontend-proxy"],[139,1],null,null]
执行diff_patterns差异模式分析查询...
\n差异模式分析结果 (1 条记录):
ret: [["\"serviceName\"='cart'","\"serviceName\"='frontend-proxy'"],[139,1],[0,0],[0.9928571428571429,0.007142857142857143],[0.0,0.0],[0.9928571428571429,0.007142857142857143],[1.0,1.0],[0.0,0.0],null]
   ✅ get_patterns发现主要错误服务: cart (错误数: 139)
   ✅ diff_patterns确认异常服务: cart
   ✅ 多重证据确认: cart 是主要根因服务

2.4 交叉验证日志特征 (diff_patterns)

目标: 使用diff_patterns算子验证错误特征的区分性

操作步骤:

  1. 执行diff_patterns交叉验证查询
  2. 对比验证结果与get_patterns结果
  3. 确认错误模式的区分性和可靠性

2.5 根因分析总结

目标: 综合所有证据,确定最终的根因服务和置信度

证据权重评估:

  1. 错误span证据: 是否成功收集到足够数量的错误span
  2. 模式分析证据: get_patterns是否识别出清晰的服务模式
  3. 交叉验证证据: diff_patterns是否确认了模式的区分性
  4. 服务识别证据: 是否成功从模式中提取出具体服务名

置信度评级标准:

  • 高置信度:
  • 错误span数量 ≥ 50
  • 成功识别出serviceName模式
  • diff_patterns验证通过
  • 模式支持度 ≥ 0.3
  • 中置信度:
  • 错误span数量 20-50
  • 从spanName模式推理出服务
  • 模式支持度 0.1-0.3
  • 低置信度:
  • 错误span数量 < 20
  • 无法明确识别服务
  • 模式不够清晰

根因候选格式: 直接输出服务名 (如: cart, product-catalog, payment)

输出示例:

🔍 Step 5: Root Cause Analysis Summary
============================================================
📊 分析总结:
   异常时间段:2025-08-28 14:20:10 ~ 2025-08-28 14:25:10
   分析的SLS项目:proj-xtrace-a46b97cfdc1332238f714864c014a1b-cn-qingdao
   发现错误span数量:140
🎯 根因发现:
   ✅ 已找到 140 个错误span
   ✅ get_patterns发现主要错误服务: cart (错误数: 139)
   ✅ diff_patterns确认异常服务: cart
   ✅ 多重证据确认: cart 是主要根因服务
   ✅ 根据运行时证据确定目标服务: cart
🏆 根因候选:
   🎯 cart
   📈 置信度:高
   ✅ 证据:TRUE(已检测到异常)
   📝 支持证据:
      - 发现 140 个错误span
      - diff_patterns分析表明 cart 服务异常
      - 日志模式分析验证了服务问题
      - 错误特征分析确认了根因位置
💡 建议:
   - 检查 cart 服务的健康状态
   - 查看 cart 的错误日志和异常
   - 验证 cart 的部署和配置
   - 考虑重启或修复 cart 服务
============================================================
🎯 最终答复:cart
📈 置信度:高
🔍 证据:TRUE
============================================================

3. 可能出现报错的情况

如果在运行代码时报错如下:

image.png

大概率是系统的后台没有及时获取到选手的账号ID,这时候可以去比赛界面的【数据获取】入口重新上传账号ID。

4. 代码中的默认参数介绍

代码中涉及到的参数介绍:

  • PROJECT_NAME:日志服务项目名称,默认为proj-xtrace-a46b97cfdc1332238f714864c014a1b-cn-qingdao
  • LOGSTORE_NAME:日志库名称,默认为logstore-tracing
  • REGION:地域,默认为cn-qingdao
  • CMS_WORKSPACE:云监控工作区间,这是您进行宏观监控和发现异常的主要入口。默认为quanxi-tianchi-test
  • CMS_ENDPOINT:云监控API接入地址,这是云监控服务的API终端地址,所有通过程序(如SDK、命令行工具)对云监控指标数据的请求,都需要发送到这个地址。默认为cms.cn-qingdao.aliyuncs.com


参考文档

相关文章
|
监控
使用云监控2.0页面诊断问题根因-错误分析指南
针对一次故障的根因诊断,通过云监控2.0调用链分析。
1907 0
|
人工智能 运维 监控
2025 AI 原生编程挑战赛 数据获取文档
本文介绍了参赛者如何配置阿里云服务以参加AI运维赛。首先开通阿里云日志服务,随后创建RAM用户并为其分配访问权限。接着为该用户授权,确保其具备读取数据的权限。最后,可选地创建或重新生成AccessKey以用于后续的数据查询操作。整个流程帮助选手完成基础环境配置,以便使用阿里云日志服务进行数据分析。
2120 0
|
运维 Kubernetes 容器
使用SPL快速诊断问题根因 -- 延迟分析指南
查找故障时段内系统异常根因。
686 0
|
监控 Perl 容器
使用云监控2.0页面诊断问题根因-延迟分析指南
针对一次故障的根因诊断,云监控2.0调用链分析发现异常耗时,经排查为【checkout】服务独占耗时过长,进一步分析确认其CPU使用率突增至100%,判定根因为【checkout.cpu】性能问题。
982 0
|
1月前
|
人工智能 运维 监控
让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动
本次大赛由阿里云主办,云原生应用平台承办,聚焦 Operation Intelligence 的智能运维(AIOps)赛道,为热爱 AI 技术的开发者提供发挥创意和想象力的舞台,借助 LLM 强大的推理能力与标准化整合的多源可观测数据,找到 AI 应用在智能运维(AIOps)场景上的新方式。
341 31
|
1月前
|
人工智能 算法 小程序
再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Qoder 。真的是太好用了,一点也不比 Cursor 差。
650 10
|
人工智能 Kubernetes Perl
2025 AI 原生编程挑战赛 术语说明与FAQ
本文档介绍了天池2025比赛的相关术语和一些疑问的解答。包括云监控平台(CloudMonitor 2.0)、日志服务(SLS)、观测数据租户(Workspace)、地域(Region)等平台与入口概念,并详解了Trace、Span、Log、Metric、Event等核心数据模型及其关键字段。文档还涵盖了PromQL告警规则、SPL日志查询、Kubernetes实体层级、诊断方法论术语等内容,同时提供了根因分析的命名规范、提交格式(JSONL)、时间窗口要求及常见问题解答,旨在帮助参赛者高效定位并解决系统故障。
912 2
|
机器学习/深度学习 数据采集 人工智能
机器学习实战 | 自动化特征工程工具Featuretools应用
本篇讲解使用自动化特征工程工具Featuretools,对数据进行自动化特征工程的方法,并借助于BigMart Sales数据集来演示自动化特征工程的相关应用。
2091 0
机器学习实战 | 自动化特征工程工具Featuretools应用