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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虹科Pico汽车示波器 | 免拆诊断案例 | 2015 款路虎神行者车熄火后散热风扇依旧高速运转

一、故障现象 一辆2015款路虎神行者车,搭载2.2 L发动机,累计行驶里程约为16万km。车主反映,车辆熄火后,散热风扇依旧高速运转,且无法停止。 二、故障诊断 接车后首先试车,故障现象的确存在。使用故障检…

相机安装位置固定后开始调试设备供电公司推荐使用方法

摄像头安装位置固定后开始调试 设备供电:无电源设备需要连接12V/2A电源并连接到摄像机的DC端口,而有电源的摄像机可以直接连接到220V电源。 连接设备:如果是有线连接,请使用网线将设备连接到电脑(建议直接连接&#…

H5简约星空旋转引导页源码

源码名称:H5简约星空旋转引导页 源码介绍:一款带有星空旋转背景特效的源码,带有四个按钮 需求环境:H5 下载地址: https://www.changyouzuhao.cn/11655.html

H5自适应程序员个人主页源码

H5自适应程序员个人主页源码 源码名称:自适应程序员个人主页源码 源码介绍:一款自适应程序员个人主页源码,带有4个页面,分别对应首页、个人技能页、我的朋友页【也可改为的我站点】、联系我页面。 需求环境:H5 下载地址&#x…

【数据结构】二叉树的层序遍历、前序遍历,中序遍历、后续遍历

目录 一、前言二、二叉树的遍历概念三、根据遍历结果去推其他的遍历结果1.根据前序遍历、中序遍历,求后序遍历2. 已知中序和后序遍历,求前序遍历 四、代码实现 一、前言 最近也是在准备笔试,由于没有系统的学过数据结构,所以花了…

YOLOV5添加 ECA CA SE CBAM 等八种注意力机制(小白可用)

目录 CBAM注意力机制原理及代码实现 代码实现 yaml文件 修改后的结构图 SE注意力机制 SE结构图 完整代码实现 报错 ⭐欢迎大家订阅我的专栏一起学习⭐ 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀&…

【考研数学】打基础 - 武忠祥《基础篇》vs 李永乐《复习全书》

这个我太有同感了,但是我现在能分清了,绝对给大家讲明白 大家疑惑的是,武忠祥老师的基础阶段为什么有人推荐高等数学基础篇,有人推荐复习全书。所以到底该用哪一个。 其实这是因为武忠祥老师在两个机构干过,在有道的…

前端之用HTML弄一个古诗词

将进酒 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>将进酒</title><h1><big>将进酒</big> 君不见黄河之水天上来</h1><table><tr><td ><img…

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

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

了解O2OA(翱途)开发平台中的VIP应用

使用O2OA(翱途)开发平台可以非常方便地进行项目的业务需求开发与实施&#xff0c;O2OA(翱途)开发平台并不限制实现的系统类型&#xff0c;所以能实现的系统很多&#xff0c;最终呈现的项目成果也是多样性的&#xff0c;可能是OA系统&#xff0c;可能是人力资源管理系统&#xf…

AI写作,一键生成原创文章真高效

AI写作&#xff0c;一键生成原创文章真高效!在当今信息爆炸的时代&#xff0c;写作已成为一项重要的技能。然而&#xff0c;对于许多人来说&#xff0c;写作并不容易。有时我们会面临写作灵感枯竭、时间不足或者缺乏写作能力的困扰。但是&#xff0c;随着人工智能技术的不断进步…

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

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

TS271IDT运算放大器芯片中文资料PDF数据手册引脚图图片参数价格功能

产品描述&#xff1a; TS271 是一款低成本、低功耗的单通道运算放大器&#xff0c;设计用于采用单电源或双电源供电。该运算放大器采用意法半导体硅栅CMOS工艺&#xff0c;具有出色的消耗-速度比。该放大器非常适合低功耗应用。 电源可通过引脚 8 和 4 之间连接的电阻器进行外…

Linux:深入文件系统

一、Inode 我们使用ls -l的时候看到的除了看到文件名&#xff0c;还看到了文件元数据。 [rootlocalhost linux]# ls -l 总用量 12 -rwxr-xr-x. 1 root root 7438 "9月 13 14:56" a.out -rw-r--r--. 1 root root 654 "9月 13 14:56" test.c 每行包含7列&…

Win11系统启动VMware上虚拟机蓝屏解决办法

背景 最近有在做一个项目的过程中需要使用虚拟机&#xff0c;用原来装好的的Vmware14打开虚拟机&#xff0c;直接蓝屏了&#xff0c;尝试了如下几种方法来解决&#xff0c;最好用的就是第二种&#xff0c;直接下载最新版本(在软件管家中直接下载)。 虚拟机 目前常用的虚拟机软…

idea+maven+tomcat+spring 创建一个jsp项目

概述&#xff1a;我真服了&#xff0c;这个垃圾学校还在教jsp&#xff0c;这种技术我虽然早会了&#xff0c;但是之前搞的大多都是springboot web类型的&#xff0c;这里我就复习一下&#xff0c;避免以后忘记这种垃圾技术 第一步&#xff1a;创建maven项目 第二步&#xff1a…

Java设计模式:桥接模式

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

【STL】deque双端开口容器

1.关于deque容器说明 deque容器与vector容器差不多&#xff0c;但deque是双端开口容器&#xff0c;可以在两端插入和删除元素 push_front( )//在头部插入 push_back( )//在尾部插入 pop_front( )//在头部删除 pop_back( ) //在尾部删除 其他相应函数与vector差不多&#…

Pytorch入门-TensorBoard

文章目录 WhatHOWSummaryWriter What TensorBoard是TensorFlow自带的一个强大的可视化工具&#xff0c;也是一个Web应用程序套件。 torch.utils.tensorboard 是 PyTorch 提供的一个用于将标量、图像、直方图和其他信息记录到 TensorBoard 中的实用程序包。TensorBoard 是 Tenso…

Pycharm的Project Structure (项目结构)

文章目录 一、Sources二、Tests三、Exeluded四、Namespace packages五、Templates六、Resources 一、Sources 源代码根目录&#xff1a;包含项目的主要源代码&#xff0c;它会在这个目录下搜索代码&#xff0c;然后自动补全和只能提示都通过这里的代码提供。若项目运行自定义代…