以Trace为核心的根因分析概述

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 近期一直在学习和复现“根因分析”领域的相关文章,在这里跟大家一起分享下相关内容。这里不在赘述关于“可观测性”和“AIOps”的重要性和必要性,也不过多的陈述在“复杂系统”中进行快速根因诊断的必要性,直接进入到相关算法和系统设计部分。

上一篇文章《【论文调研】根因分析:Micro.X系列》主要是通过阅读以下两篇文章进行的实验流程梳理和相关方法的总结而得来。

  • 《MicroRCA: Root Cause Localization of Performance Issues in Microservices》
  • 《MicroDiag: Fine-grained Performance Diagnosis for Microservice Systems》

近期一直在学习和复现“根因分析”领域的相关文章,在这里跟大家一起分享下相关内容。这里不在赘述关于“可观测性”和“AIOps”的重要性和必要性,也不过多的陈述在“复杂系统”中进行快速根因诊断的必要性,直接进入到相关算法和系统设计部分。

在智能运维的体系中,用来分析和建模的数据可以笼统的分为:Log + Trace + Metric,这里面的数据量是巨大的,且数据形态是复杂多样,对于企业来说,不仅仅要考虑存储系统的吞吐、以及架构在存储系统之上计算引擎的灵活性,同时也会很关注成本。

基于Trace我们可以做些什么?

业务场景

  • 拓扑生成
  • 架构梳理
  • 各服务的流量估算
  • 系统的热点分析
  • 链路的性能分析
  • 错误的传播分析
  • 发布过程中,流量的灰度分析,发布质量的评估


各家根因分析系统(系统+算法)

EMonitor -> 基于Tracing和Metrics的诊断系统

该系统是来自阿里本地生活的故障诊断的分享,在特定场景中可以较好的解决如下问题:

  • 哪些入口受到了影响?
  • 受影响的入口的本地操作和远程操作的影响如何?
  • 受影响的入口都抛出了哪些异常?

在该系统中,无法准确(无法直接根据数据给出,需要推断)的解决如下问题:

  • GC问题
  • 容器问题
  • 变更导致的问题

该诊断系统的上层出发点是源自于观测的核心SLO指标的抖动,去分析是哪些聚合维度的指标的异常导致了当前的扰动,从而定位到需要进一步诊断的下层入口,通过如此反复的确认,得到最终的定位信息。这里提供一张特定的图(来自知乎上的发表过的图)。

通过上述图中的描述,我们可以看到饿了么团队可以完成如下几个能力:

  • 大量复杂的数据预处理,通过一定的手段将数据进行清洗后格式化(或者严格要求日志字段格式),较好的完成了Metrics、Logs、Trace的关联跳转;
  • 开发了特定的计算策略(OLAP侧或者本地服务侧)支持扰动分析,提供出探寻的候选集;
  • 在特定的业务场景中,支持多个服务模块之间的参数调用,得到较为完成的业务侧拓扑;

但是分析下来,里面必定特别多的定制化的操作和对于开发的严格日志结构的要求,且有较大的定制化开发需求,在云上快速拓展有一定的难度。


GMTA Explorer -> 基于Trace的监控和服务诊断

该系统是eBay建立并在企业中落地的诊断系统,这套系统可以解决eBay每天1500亿条Span数据,可以在一定程度上处理Trace数据中的断链和错链问题。这里最核心的概念在如下的图2中已经描述出来了,这里重新提取下:

  • BusinessFlow(业务流):最终是由业务方(使用方)来确定的;
  • Path:同一个业务在一段时间内的请求所构成的一个链路,最终是有多条Trace的路径合并出来的(业务请求在微服务系统中流经的节点所构成的Path)

数据流图+算法设计

在上图中,我们可以看到最核心的是要通过Flink计算出单条Trace的Path,然后通过一定的手段(聚类等)实现业务流的生成(Business Flow)。在数据处理的环节有几个重要的手段进行数据的处理:

  • 根据特定业务输入,完成一些无效操作名称的替换;
  • 根据标准的Trace定义,丢弃一些错误的数据,比如:根节点缺失、多个根节点等;
  • 同时要尽可能关联一些错误日志数据,叫做错误传播链(EP Chains, Error Propagation Trace);

下图较为清晰的描述了几个核心概念之间的关系。

这里我们可以简单说下,产生最终业务流的依赖的数据。根据文中的数据来说,在图数据存储中,时刻更新着当前系统中操作粒度的调用关系图,在分析型存储中按照一定的需求,存储着Path信息和业务流信息。

通过文中这个图,我们可以基本知道分析型存储中的基本结构,其中对于后续分析问题较为重要的两个核心属性是:PathID和BusinessFlowName,其中重中之重的属性值是PathID。那么,我们查看下原文中对于PathID的生成部分的描述。这里我们就要查看下文中的一个SpanHash的策略了。

span
 + serviceName
 + operationName
 + level
 + durations
 + statusCode
 + labels
 + childSpans[]Algorithm 1 SpanHash(span)
+ hash = HashCode(span.serviceName) + HashCode(span.operationName) + span.level * PrimeNumber
+ for each child in span.childSpans do
+     hash += SpanHash(child)
+ end for
+ return hash


这里面一个比较核心的问题在于:如何在海量的Trace数据中,以较小的成本去解决单个span在Trace链路中的level和childSpans的问题?(这个问题本质上将是:底层的存储和计算引擎的选型和问题,文中提到,在eBay中使用的是Neo4j+Druid+Flink进行存储和计算

还有一点值得称赞的是,该平台的完整度问题,在GMTA Explorer中,提供了很多基础能力,我们一起来看下。

基于上述能力,可以解决不同场景的业务问题

  • 作为开发人员,可视化业务流程中服务的依赖关系和依赖项,以确定服务的更改影响。
  • 作为架构师,学习与关键业务(例如支付)相关的路径和指标,以支持架构决策。
  • 作为 SRE,确认服务行为的变化或模式,并评估业务变化或其他因素对流量、延迟和错误率等指标的影响。

这里就提供下文中的实验例子,由于接口变更导致的服务指标的变化。

可以较为清晰的看到,上部分表达的是某个业务流中有三个核心链路,下面部分表示的是链路归并后的效果,我们可以很清晰的看到,在userCheckout这个链路中calculateMoney的调用接口由"coupon" -> "couponV2"后,可以较清楚的看到,对于createOrder来说,调用量上升了20%,延迟降低了5%。

在工程实践上的一些取舍

  • 在后端存储和计算的选型上,不额外的造轮子,选择现有的大数据组件,且经过一些中间层粘合起来使用
  • 对于如此大的数据规模,在实际中,也会进行一定的采样(文中提到了1%的采样率写入到Kafka中)
  • 对于trace中数据的迟到和完整度的问题,采用Flink去解决
  • 对于Flink消费之后的结果,一部分写入到Druid中,一部分直接提取后写入到neo4j中
  • 在通过一些UI可视化组件解决后续的交互式分析问题

几点思考

  • 这偏文章读下来更多的是偏向介绍数据在系统中的流转,并非过多的在介绍算法本身(单纯的看算法部分缺失不复杂),落地起来较为可行;
  • 在PathID生成中,过分依赖Flink的State能力,并没有设计或优化下高效的生成PathID的策略,这里还需要进一步的提升;
  • 在文末提到,对数据进行Trace数据的1%的采样,并没有透露出具体的采样策略,因为采样策略对数据质量和数据覆盖度有较为严重的影响;
  • 文中提出了Business Flow的概念,这个让我眼前一样,继续探索下,如何能进一步自动生成BusinessFlow的策略,可以通过一个UI让用户可以来管理自己的业务就是很大的进步了;


根因诊断的下一步思考

  • 算法侧需求
  • Trace场景的数据相对来说较为确定且具体,其中面临的问题也是确定的,这里更多的是是考虑如何在端上可以灵活的按需去采样,去解决后端的存储成本的问题,对于算法侧来说复杂度不是很高;
  • 在解决Trace数据后,如何将Metric和Alarm整合在一起,去自动化的做因果分析,这个还是复杂一些的;
  • 是否可以在以一步的让AI去学习我们的业务代码,能否将根因结果自动的和代码提交进行诊断,进一步定位到具体的更改(微软等已经在做了一些尝试)
  • 下一步更多的需要去考虑多元数据的融合问题,能否在云上提供类似APM中的完整能力,做到简单、易用;
  • 现阶段对于平台来说,要解决好信息抽取后的表达和管理工作,为后续的自动化分析和诊断扫清 障碍;


欢迎大家一起讨论

我是来自阿里云日志存储(SLS)团队的悟冥,我们已经提供了基于OpenTelemetry等其它标准协议的Trace数据的存储、计算、分析能力,也欢迎大家使用。


在参考资料中,放了一些阅读过和将要读的文章列表,欢迎大家可以私信我一起讨论,同时也欢迎各位前来实习或者工作,这里留个邮箱:

  • 悟冥
  • wuming.lgy@alibaba-inc.com


参考资料

  • SLS Trace https://help.aliyun.com/document_detail/208889.html
  • 【论文调研】根因分析:Micro.X系列 https://zhuanlan.zhihu.com/p/407298025
  • EMonitor之根因分析 https://zhuanlan.zhihu.com/p/137555421
  • AIOps项目开发实战https://www.shouxicto.com/article/115.html
  • 《MicroRCA: Root Cause Localization of Performance Issues in Microservices》
  • 《MicroDiag: Fine-grained Performance Diagnosis for Microservice Systems》
  • 《MicroHECL: High-Efficient Root Cause Localization in Large-Scale Microservice Systems》
  • Graph-Based Trace Analysis for Micro-service Architecture Understanding and Problem Diagnosis
  • CauseInfer: Automated End-to-End Performance Diagnosis with Hierarchical Causality Graph in Cloud Environment
  • 《CauseInfer: Automatic and Distributed Performance Diagnosis with Hierarchical Causality Graph in Large Distributed Systems》
  • 《On Microservice Analysis and Architecture Evolution: A Systematic Mapping Study》
  • 《AutoMAP: Diagnose Your Microservice-based Web Applications Automatically》
  • 《Self-Adaptive Root Cause Diagnosis for Large-Scale Microservice Architecture》
  • 《MS-Rank: Multi-Metric and Self-Adaptive Root Cause Diagnosis for Microservice Applications》
  • 《FacGraph: Frequent Anomaly Correlation Graph Mining for Root Cause Diagnose in Micro-Service Architecture》


相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
运维 监控 JavaScript
(ARMS-AIOps)一文教你用Attributor算法实现多维下钻分析
常见的AIOps应用路径为:对监控的各种关键性能指标(KPI)进行实时异常检测;对多维指标进行根源分析,快速下钻到异常维度和元素;基于应用拓扑和实时Trace,实现根因定位;结合CMDB、关联等、构建异常根因上下文,帮助快速修复问题。 作为KPI指标, 往往包含了很多维度和元素,最显而易见的则是对每一个维度的元素都进行实时异常检测。 对于维度组合笛卡尔集数量很长的场景, 该方案的成本则有点难以承受
5108 0
|
机器学习/深度学习 监控 Web App开发
SLS机器学习最佳实战:根因分析(一)
通过算法,快速定位到某个宏观异常在微观粒度的具体表现形式,能够更好的帮助运营同学和运维同学分析大量异常,降低问题定位的时间。
13032 0
|
8月前
|
SQL 运维 算法
链路诊断最佳实践:1 分钟定位错慢根因
本文聚焦于线上应用的风险管理,特别是针对“错”(程序运行不符合预期)和“慢”(性能低下或响应迟缓)两大类问题,提出了一个系统化的根因诊断方案。
545 103
|
6月前
|
人工智能 运维 安全
AI大模型运维开发探索第四篇:智能体分阶段演进路线
本文探讨了智能体工程的演进历程,从最初的思维链(智能体1.0)到实例化智能体(智能体2.0),再到结构化智能体(智能体3.0),最终展望了自演进智能体(智能体4.0)。文章详细分析了各阶段遇到的问题及解决策略,如工具调用可靠性、推理能力提升等,并引入了大模型中间件的概念以优化业务平台与工具间的协调。此外,文中还提到了RunnableHub开源项目,为读者提供了实际落地的参考方案。通过不断迭代,智能体逐渐具备更强的适应性和解决问题的能力,展现了未来AI发展的潜力。
|
SQL 数据采集 运维
「应用实时监控 ARMS 」斩获「根因分析技术」先进级认证
「应用实时监控 ARMS 」斩获「根因分析技术」先进级认证
927 88
|
人工智能 监控 数据库
LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅
基于大语言模型的应用在性能、成本、效果等方面存在一系列实际痛点,本文通过分析 LLM 应用模式以及关注点差异来阐明可观测技术挑战,近期阿里云可观测推出了面向 LLM 应用的可观测解决方案以及最佳实践,一起来了解下吧。
19917 106
LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅
|
机器学习/深度学习 运维 监控
从 2023 CCF AIOps 挑战赛看日志异常检测
2023年的 CCF AIOps 挑战赛相较往年主要有以下不同:赛题的形式从命题式转变为开放式、比赛场景的丰富度进一步提升。
135354 4
从 2023 CCF AIOps 挑战赛看日志异常检测
|
机器学习/深度学习 运维 大数据
【KDD2024】大数据基础工程技术集群异常检测论文入选
阿里云计算平台大数据基础工程技术团队主导,与浙江大学合作的论文《Cluster-Wide Task Slowdown Detection in Cloud System》被数据挖掘领域顶会ACM SIGKDD2024接收
|
监控 前端开发 JavaScript
ARMS集成监控代码
【8月更文挑战第24天】
298 6
|
运维 供应链 监控
根因分析
根因分析
422 0

热门文章

最新文章