AIOps 智能运维:有没有比专家经验更优雅的错/慢调用分析工具?

作者:图杨

工程师小 A 刚刚接手他们公司最核心的电商系统的运维工作,小 A 发现,在生产环境中,系统明明运行得非常稳定,但是总会出现一些“诡异”的情况。比如:

  1. 偶尔会一些错误调用,但是,还没来得及修,系统又莫名奇妙地恢复正常。
  2. 应用的平均响应时间很短,但是总会有一些响应时间非常长的离群调用,每次花很多时间来分析这些离群点,但是每次分析出来的结果都不一样,有时候是数据库问题,有时候是消息队列的问题,原因千奇百怪,很难逐一排查。

如果是经验丰富的工程师,对系统非常非常熟悉,也许能够依靠经验来解决这些“诡异”的问题。但是,对于一个大型公司来说,他们的系统已经迭代了十几年,几百个人贡献过代码,很难再出现对系统非常熟悉的工程师了。所以,每次系统出现问题,小 A 都需要用多种工具,花费大量时间来排查,还要面对客户时不时的投诉;每一次 618 和双十一前夕,大家都战战兢兢,求神拜佛,祈祷千万不要在关键时刻发生异常。

那么,除了专家经验和对好几十种可能性逐一排查之外,有没有更优雅的,快速定位错/慢 Trace 产生原因的工具?

答案是有的,阿里云应用实时监控服务 ARMS 最近推出了错/慢 Trace 分析功能(Trace 是调用链,指从用户发起服务请求到结束,按顺序记录整个请求链路的相关数据,关于 Trace 的介绍可以看 [ 1] )。我们会对错/慢 Trace 和正常 Trace 在每一个维度进行对比分析,从而帮助用户挖掘错/慢 Trace 的的共有特征。

该功能不需要任何专家经验,即使小 A 对系统不那么熟悉,他也可以利用这个功能,在大促前夕梳理一下经常出错,或者响应时间远高于平均值的接口和机器,有针对性的对系统进行优化。在这篇文章中,我们将介绍:

  1. ARMS 错/慢 Trace 分析功能基本原理;
  2. 该功能能够覆盖哪些异常 Trace 根因;
  3. 最后会介绍一些最佳实践案例。

该功能已正式发布,产品文档 [ 2] 和最佳实践案例 [ 3] 均已上线,文章的最后有免登录 demo 的体验链接,欢迎大家来体验。

ARMS 错/慢 Trace 分析功能基本原理

在生产环境下,影响调用时延以及引发错误的因素有很多,流量不均、单机故障、程序异常、依赖组件瓶颈等。友商和学术界常用的方式是利用 ML、LLM 对大量 Trace 进行训练,再来对新来的异常 Trace 进行分类,以此来定位根因。但是在实际生产环境中,不同系统的 Trace 特征完全不同,而且随着系统的更新,Trace 的特征以及引发错/慢 Trace 的根因也会不断改变。因此,对于商业可观测产品而言,这种基于历史数据对新数据进行判断的方法,基于我们浅薄的认知,现有的算法可能还不够成熟。

为了避免应用间的差异对错/慢 Trace 根因定位准确率的影响,我们的方案是:

“将错/慢 Trace 和同一系统中,正常 Trace 从各个维度进行对比,识别出错/慢 Trace 的特征,引导用户不断探索,最终定位异常根因。”

举个例子,当用户收到了大量接口报错的告警,但是不知道引发异常的根因是什么。在这种情况下,ARMS 错/慢调用分析功能,会对一个系统中 1000 条错 Trace 样本和 1000 条正常 Trace 样本从各个维度进行比较,发现几乎所有的错 Trace 都集中在应用 “mall-gateway”、主机 “10.0.0.47” 和接口 “components/api/v1/mall/product” 上,并且经过它们的,基本没有正常 Trace,那么和应用名 =“mall-gateway”、主机 Ip=“10.0.0.47” 和接口名 =“components/api/v1/mall/product” 的 Trace 值得进一步排查,因为很有可能就是部署在这台主机上的这个接口出现了问题。

图片

并且,ARMS 支持用户自定义要分析和对比的 Trace,只需要在调用链分析的筛选框修改条件即可,比如可以把 serviceName=“mall-gateway” 放到筛选框中,对该应用的错 Trace 进行进一步分析。

图片

您可以不断地重复这个过程,直到您定位到系统的异常。

ARMS 错/慢 Trace 分析功能能够覆盖哪些异常 Trace 根因?

我们定位根因的逻辑是,对批量错/慢 Trace 和批量正常 Trace 在各个维度上进行比较,所以理论上,只要是调用链上拥有的维度能表征的信息,我们都能定位出来,包括但不限于:

  1. 主机异常
  2. 接口异常
  3. 慢 SQL
  4. 消息队列异常等等

最佳实践

如何通过错 Trace 分析功能,排查错调用根因?

Step 1:发现 13:21 到 13:28,应用 “mall-gateway” 出现了一些 Http 错误的调用

图片

Step 2:修改时间窗口到批量 Http 错误发生的时间段,开始排查问题

图片

Step 3:进入错 Trace 分析页面

发现:错调用集中在 3 个维度:接口名 = “/components/api/v1/mall/product”,IP=“10.0.0.47” 以及 IP=“10.0.0.37”,下面依次进行排查。

图片

Step 3.1:排查 spanName=“/components/api/v1/mall/product”

发现:接口 “/components/api/v1/mall/product” 的错调用几种在 3 个 Ip 中,并且,路过这些 IP 的,全部都是错误调用。

这说明这三个 Ip 对应的主机很可能出现了异常,下面进行进一步排查。

图片

Step 3.1.1:

serviceName=“mall-gateway” AND spanName=“/components/api/v1/mall/product” AND ip=“10.0.0.47”

发现该筛选条件下,每一次调用都是错误调用,这说明主机 “10.0.0.47” 中,应用 “mall-gateway” 的接口 “/components/api/v1/mall/product”。在该时段确实出现了异常。

图片

可以回到调用链列表页面进一步确认。

图片

可以点击任意一条 Trace 查看详情。

Step 3.1.2:

排查 serviceName=“mall-gateway” AND spanName=“/components/api/v1/mall/product” AND ip=“10.0.0.50”

类似地,发现该筛选条件下,每一次调用都是错误调用。

图片

Step 3.1.3:

排查 serviceName=“mall-gateway” AND spanName=“/components/api/v1/mall/product” AND ip=“10.0.0.37”

Step 3.2:排查 Ip =“10.0.0.50” 和 Ip = “10.0.0.37”

其实聪明的读者应该已经发现了问题,刚刚我们在排查接口 “/components/api/v1/mall/product” 时就已经发现了这两台主机有问题。但是我们还是可以继续排查。

发现:对 Ip =“10.0.0.47” 或  Ip = “10.0.0.37” 的错调用开始下钻分析,也指向了接口 “/components/api/v1/mall/product”,并且这些错误都是 500 错误。

这和上一步的排查指向了同样的根因,这说明部署在主机 “10.0.0.47” 以及 “10.0.0.37” 上,接口 “/components/api/v1/mall/product” 相关的程序出现了错误,建议查一下相关代码近期的变更。

图片

如何通过慢 Trace 分析功能,梳理慢接口?

Step 1:发现应用 serviceName=“mall-user-server” 中,在 13:40 到 13:49 存在许多 5s 以上的慢调用

图片

Step 2:先关注 15:40 到 15:49,5s+ 的 Trace,将【耗时对比临界值】改成 5s

发现耗时大于 5s 的 Trace 集中在接口 “/components/api/v1/local/success”、“/components/api/v1/http/success” 和 Ip=“10.0.0.44” 的主机中。

图片

Step 3:依次排查 2 个接口和一个 Ip 地址

Step 3.1:排查 serviceName=“mall-user-server” AND spanName=“/components/api/v1/local/success”

发现:该筛选条件下,每一次调用耗时都大于 5s,它是一个慢接口,已经定位到根因。

图片

回 Trace 详情页面进一步确认,发现该筛查条件下,平均耗时就大于 5s。

图片

Step 3.2:排查 serviceName=“mall-user-server” AND spanName=“/components/api/v1/http/success”

发现:该筛选条件下,每一次调用耗时都大于 5s,它是一个慢接口。

图片

Step 3.3:排查 serviceName=“mall-user-server” AND ip=“10.0.0.44”

发现:该筛选条件下,慢 Trace 的也指向了接口 “/components/api/v1/http/success”,和 Step 3.2 重合了,可以推断接口 “/components/api/v1/http/success” 部署在主机 “10.0.0.44” 上,它出现了一些异常。

当然用户还可以进一步往下探索。

图片

Demo 体验链接

https://www.aliyun.com/product/arms?spm=5176.26798190.J_8765075780.1.7b673fd69umBcT

Step 1:切换成新版控制台

图片

Step 2:点击调用链分析按钮

图片

总结

在这篇文章中,我们试图帮助小 A 排查系统中,“诡异”的错/慢调用产生原因。我们给出了一种,比专家经验更优雅的,排查问题的工具—— ARMS 错/慢 Trace 分析,并给出了最佳实践教程。

通过使用 ARMS 错/慢 Trace 分析功能,系统发生故障的时候,小 A 可以不再依靠“直觉”来排查问题;在大促前夕,也可以梳理出慢调用接口、容易引发错误的主机等,这样工程师们能够更优针对性地对系统进行优化。

这样,工程们在排查问题上花的时间少一点,专注在业务代码上的时间多一点,把核心业务做大做强。

欢迎加入我们的 AIOps 客户交流钉钉群(群号:25125004458):

图片

相关链接:

[1] 基础篇丨链路追踪(Tracing)其实很简单

[2] 查看应用的调用链信息_应用实时监控服务(ARMS)-阿里云帮助中心

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/call-chain-analysis

[3] 通过错/慢调用链排查应用产生异常的原因_应用实时监控服务(ARMS)-阿里云帮助中心

https://help.aliyun.com/zh/arms/application-monitoring/use-cases/troubleshooting-application-anomalies-through-error-slow-trace-analysis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈如何自我实现一个消息队列服务器(1)——需求分析

文章目录 一、什么是消息队列?二、当下主流的消息队列(MQ)三、自我实现一个消息队列服务器的前期准备——需求分析3.1 核心概念3.2 broker server 核心概念3.2.1、虚拟主机(Virtual Host)3.2.2、交换机(Exchange)3.2.2…

shopee店铺降权了怎么办?shopee店铺降权恢复步骤

当您发现自己的Shopee店铺被降权时,这意味着您的产品在搜索结果中的排名下降,从而可能导致流量和销售额的减少。面对这种情况,您需要采取一系列措施来恢复或提升店铺的权重。以下是一些具体的步骤和拓展的原因分析:一:…

3、设计模式之工厂模式2(Factory)

一、什么是工厂模式 工厂模式属于创建型设计模式,它用于解耦对象的创建和使用。通常情况下,我们创建对象时需要使用new操作符,但是使用new操作符创建对象会使代码具有耦合性。工厂模式通过提供一个公共的接口,使得我们可以在不暴露…

【深度学习笔记】7_7 AdaDelta算法

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 7.7 AdaDelta算法 除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的…

嵌入式驱动学习第三周——linux内核链表

前言 在 Linux 内核中使用最多的数据结构就是链表了,其中就包含了许多高级思想。 比如面向对象、类似C模板的实现、堆和栈的实现。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博…

C#无法给PLC写入数据原因分析

一、背景 1.1 概述 C#中无法给PLC写入数据的原因有很多,这里分享网络端口号被占用导致无法写入的确认方法 1.2 环境 ①使用三菱PLC ②C#通过网口与PLC进行通讯 二、现象 1.1 代码 通过HslCommunication连接PLC时,连接返回成功,写入返回失败 …

snakeflow的springboot项目

Gitee搜索“liuxz/snakerflow”,它是spring boot集成了一款国产工作流引擎snakerflow。 下面是安装步骤: 创建数据库snaker-web,字符集设置成utf8mb4和utf8mb4_generic。不然的话,中文插入不进去。 运行sql命令 CREATE TABLE …

Kotlin:泛型

点击查看泛型中文文档 点击查看泛型英文文档 简介 与 Java 类似&#xff0c;Kotlin 中的类也可以有类型参数&#xff1a; class Box<T>(t: T) {var value t }一般来说&#xff0c;要创建这样类的实例&#xff0c;我们需要提供类型参数&#xff1a; val box: Box<…

调试安卓 gles性能瓶颈

目录 下载Arm Performance Studio编译Unity Shader运行malios调试用处和限制 原文请见&#xff1a;参考地址 使用mali offline shader compiler分析shader的性能瓶颈。 下载Arm Performance Studio 下载地址 编译Unity Shader 通常选择GLES3x。 You might need to select G…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座&#xff0c;但是好像接口不开放&#xff0c;所以找到了这个插座&#xff0c;然后自己开发了下&#xff0c;用接口控制插座开关。wifi的连接方式&#xff0c;通电后一般几秒后就会连接上wifi&#xff0c;这个时候通过接口发送命令给他。 产品图片 通…

idea配置自定义注释模版和其他模板

项目场景&#xff1a; idea配置自定义模版 自定义注释模版其他模板&#xff0c;包括syso快捷键&#xff0c;swith快捷键等 自定义注释模版 1、File and Code Templates 第一种类创建完后头部自动生成注释模板 打开idea&#xff0c;选择 Settings--> Editor--> File a…

nvm安装不同版本的node

在项目开发过程中&#xff0c;不同项目依赖的node版本不同&#xff0c;但频繁的卸载和安装很麻烦&#xff0c;这篇文章介绍nvm安装过程 1.nvm安装 这个网上随便找一篇跟着安装即可 nvm安装教程 2.nvm安装不同版本的node 网上普遍的方式是&#xff1a; 找到nvm安装目录下的s…

浅谈LockBit勒索病毒

在数字时代&#xff0c;随着科技的飞速发展&#xff0c;网络安全问题愈发凸显。恶意软件和勒索软件等网络威胁正不断演变&#xff0c;其中一款备受关注的勒索软件就是LockBit。 LockBit是一种高度复杂且具有破坏性的勒索软件。与传统的勒索软件相比&#xff0c;LockBit在其攻击…

NVMFS5A160PLZT1G汽车级功率MOSFET P沟道60 V 15A 满足AEC-Q101标准

关于汽车电子AEC Q101车规认证&#xff1f; 是一种针对分立半导体的可靠性测试认证程序&#xff0c;由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等…

新建项目module,但想归到一个目录下面

1. 想建几个module, 例如 component-base-service,component-config-service, 但是module多了会在CloudAction下面显示很多目录, 所以想把它们归到components模块下面去, 类似于下图的效果 2. 创建过程 右击CloudAction 新建 module -> 选maven类型 输入components, 建成后删…

Capture One 23:光影魔术师,细节掌控者mac/win版

Capture One 23&#xff0c;不仅仅是一款摄影后期处理软件&#xff0c;它更是摄影师们的得力助手和创意伙伴。这款软件凭借其卓越的性能、丰富的功能和前沿的技术&#xff0c;为摄影师们带来了前所未有的影像处理体验。 Capture One 23 软件获取 Capture One 23以其强大的色彩…

【C语言】Infiniband驱动mlx4_load_one函数

一、中文注释 以下是针对mlx4_load_one函数的主要代码路径的中文注释。该函数是用于加载并初始化Mellanox网络设备的驱动函数。通过注释&#xff0c;可以了解函数在初始化过程中执行的关键步骤。 /* mlx4_load_one函数&#xff1a;用于加载并初始化PCI设备&#xff08;例如网…

效果图代渲多少钱一张?带你详细了解它的计费规则!

不知道有没有朋友遇到过渲着渲着就崩溃的情况发生&#xff0c;不然也不会去找代渲染的平台/某宝等渠道 也就是为了图能够顺利的跑出来&#xff0c;做了后期处理后&#xff0c;及时交付给客户。 我们以渲染100云渲染来举例&#xff0c;它成立2015年&#xff0c;是一家效果图代…

接口自动化测试框架:Pytest+Allure+Excel

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具&#xff0c;它不仅以 Web 的方式展示了简介的测试结果&#xff0c;而且允许参与开发过程的每个人可以从日常执行的测试中&#xff0c;最大限度地提取有用信息。 Allure 是由 Java 语言开发…