火焰图:链路追踪分析的可视化利器

news2024/10/7 4:29:46

什么是火焰图?

火焰图用于可视化分布式链路追踪,通过使用持续时间和不同颜色的水平条形来表示请求执行路径中的每个服务调用。分布式跟踪的火焰图包括错误、延迟数据等详情,帮助开发人员识别和解决应用程序中的瓶颈问题。

链路追踪与 Span

一般来说,单个追踪(Trace)由各个 Span(跨度)构成。Span 代表一次调用或操作的单个组件,可以是一个方法调用、一个 HTTP 请求或者其他类型的操作。每个 Span 都包含了一些关键信息,如开始时间、结束时间、耗时、所属的 Trace ID、Span ID 等。Span 的核心是记录对应程序执行片段的开始时间和结束时间,而程序执行片段之间存在调用的父子关系,因而 Span 逻辑上形成树状结构。

在观测云,火焰图帮助我们以一个全局的视野来看待时间分布,从顶部往底部,根据时间分布及调用深度两个方面列出所有可能导致性能瓶颈的 Span。

在我们进一步了解火焰图之前,首先需要知悉其绘制逻辑:

  • 纵轴(Y轴):调用 Span 的层级深度,用于表示程序执行片段之间的调用关系:上面的 Span 是下面 Span 的父 Span(数据上也可以通过子 Span 的 parent_id 等于父 Span 的 Span_id 来关联来对应)。
  • 横轴(X轴):单个 Trace 下 Span 的持续时间(duration),一个格子的宽度越大,越说明该 Span 的从开始到结束的持续时间较长,可能是造成性能瓶颈的原因。

如何通过火焰图实现链路追踪分析?

火焰图

当我们来到应用性能监测 > 链路,打开某一条链路数据详情页,即可查看该链路相关的火焰图。火焰图主要关注调用 Span 的深度,从上往下依次展示各级 Span 的调用关系,从左往右显示 Span 的持续时间。

颜色

火焰图上的每个 Span 的颜色都与其服务(service)的颜色相对应。因此,我们可以直观地感知当前 Trace 中正在执行的服务请求。

服务的颜色生成逻辑:

  • 用户登录到工作空间访问应用性能监测模块时,观测云会根据服务名称自动生成颜色,该颜色的集成会继承到链路查看器等分析页面;
  • 在应用性能监测 > 服务,点击特定服务行右侧的颜色图标可以进行修改,修改后相关服务颜色均会同步改变。

在上图中,此次调用链路包含了两个服务,分别为 kodo.nsq.producer 和 kodo;同时后者还存在一个相关联的子 Span。

当我们点击某条 Span,如 kodo.nsq.producer。默认显示当前 Span 的资源(resource)或操作(operation)、持续时间(duration)以及是否存在错误(status = error)。在下图的提示中,我们可以简单得知该条 Span 的 resource 、operation 和 duration

链路详情

如果我们想获得更多详细信息,可点击该条 Span,在下方的链路详情可查看对应的 JSON 内容:

服务列表

在火焰图右侧的服务列表,显示当前 Trace 内发生请求调用的服务名称、对应颜色及该服务执行占总执行时间的比率。

火焰图中的服务执行时间占比是指该链路中每个服务的实际执行时间及占总服务对应 Span 的执行时间总和

相关计算公式如下

1.持续时间:Span 对应程序执行片段的开始时间和结束时间,一般在 Trace 的数据中用 duration 字段来做标记。

2.执行时间

1)Span 执行时间:

  • 子 Span 可能在父 Span 结束后才结束

    • 总执行时间 = Children 的结束时间 - Parent 的开始时间
    • 父 Span 的执行时间 = 总执行时间 - 子 Span 的执行时间

  • 子 Span 可能在父 Span 结束后才开始

    • 总执行时间 = Children 的结束时间 - Parent 的开始时间
    • 父 Span 的执行时间 = 总执行时间 - 子 Span 的执行时间

  • 同属于一个 Parent 的兄弟 Span 间可能重叠

    • 父 Span 执行时间 = p(1) +p(2)
    • Children 1 Span 执行时间 = c1(1) + c1(2)
    • Children 2 Span 执行时间 = c2(1) + c2(2)

2)服务执行时间:每个服务的执行时间 = Trace 内所有属于该服务的 Span 执行时间总和

3)总执行时间:总执行时间 = Trace 内 Span 最后结束的时间 - Span 最开始的时间

使用场景
示例一:

假设我们需要排查昨日服务产生的错误数。在应用性能监测 > 服务列表,可以看到 kodo.redis 这条服务产生的错误数最多。点击右侧 搜索 图标,直接前往链路查看器查看错误详细信息。

在火焰图中,该条服务下的链路详情内会给到相关的错误详情,找到错误后即可通知相关人员响应解决。

示例二:

下图是一条链路异常调用的火焰图。我们可以看到在 guance-front 这条父 Span 下存在两条 status:error 的 子 Span。分别点击这两条 Span,我们可以从 error_message 看到出现错误均是由于 Token 验证失败 引起。由此我们就可以采取针对性的优化措施。

Span 列表

瀑布图

与火焰图按照调用 Span 的层级深度来进行上下分布的逻辑不同,瀑布图主要基于开始时间的先后顺序显示 Span 数据,从上往下依次显示当前链路各个资源之间的父子关系。

链路详情页 > Span 列表 > 瀑布图,我们可以根据线段的连接来判断父子关系。

我们还是以上文示例二中的场景为例。在当前瀑布图中,我们可以看到左侧列表展示当前链路存在的所有 Span 数据及其父子关联关系及每个资源的执行时间占比。同时,产生异常的 Span 会在资源名称左侧出现错误标识。右侧则对应显示 Span 块。

当 Hover 在左侧资源名称,我们还可以查看该条 Span 的服务、资源名称以及开始时间、执行时间、持续时间:

列表模式

当然,我们也可以切换为列表模式,借助表格,原先瀑布图中的信息一览无余。

列表模式下,存在两种状态:

  • 全收起状态:从左往右,依次显示服务类型、服务颜色及当前服务下是否存在 status = error 的 Span、服务名称、当前服务下面的 Span 数量、Span 持续时间(duration)的平均值、执行时间总和以及执行时间占比;

  • 全展开状态:从左往右,依次显示服务类型、服务颜色当前 Span 是否存在 status = error、服务名称、当前 Span 持续时间(duration)的平均值、执行时间以及执行时间占比。

结论

本篇文章仅为您简单讲述如何在观测云的火焰图中进行链路追踪分析。关于更多背后逻辑的实现和未来更多关联功能的探索,敬请期待后续好文!

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

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

相关文章

易货:一种古老而有效的商业模式

在当今的商业世界中,我们常常听到关于电子商务、互联网和社交媒体等新技术的讨论。然而,尽管这些新技术为我们的日常生活带来了许多便利,但它们并没有完全取代传统的商业模式。其中,易货模式是一种古老而有效的商业模式&#xff0…

AI绘画工具汇总

目前市面上的AI绘画工具十分繁杂,以下工具可供参考: 1. Midjourney 添加图片注释,不超过 140 字(可选) Midjourney:最主流的AI绘图工具之一,出图效果好,简单学习就可上手。需要在di…

Golang获取月份的第一天和最后一天

package mainimport ("fmt""strconv""strings""time" )func main() {month : "2023-11"result : GetMonthStartAndEnd(month)fmt.Println(result["start"] " - " result["end"]) }// 获取月…

Stable Diffusion WebUI使用AnimateDiff插件生成动画

AnimateDiff 可以针对各个模型生成的图片,一键生成对应的动图。 配置要求 GPU显存建议12G以上,在xformers或者sdp优化下显存要求至少6G以上。 要开启sdp优化,在启动参数加上--sdp-no-mem-attention 实际的显存使用量取决于图像大小&#…

StatSVN统计svn项目中每人代码提交量

一.JDK配置 StatSVN是java语言开发的,要运行必须先安装jdk并配置环境变量。 1.jdk下载地址https://www.oracle.com/ 2.jdk环境变量配置,路径为jdk安装位置 二.下载StatSVN 1.下载地址 http://sourceforge.net/projects/statsvn/ 2.解压到本地目录&a…

【Oracle 客户端连接数据库过程解析】

文章目录 一、开篇二、Oracle客户端简介三、连接过程解析 一、开篇 Oracle数据库以其卓越的性能和稳定性赢得了众多企业的信赖。作为开发者或数据库管理员,理解Oracle客户端如何与数据库建立连接,是确保系统正常运行的关键。 二、Oracle客户端简介 首…

Facebook游戏出海营销指南

当谈到Facebook游戏出海营销时,有一些关键的策略和指南可以帮助你在国际市场上取得成功。下面是一个详细的指南,帮助你了解如何有效地推广和推出你的游戏。 1、了解目标市场 在开始出海营销之前,你需要对你的目标市场进行深入的研究。了解该…

【功能栏】基于session的模拟短信注册功能

框架: spring boot mybatis-plus 目录 1.创建user表 ​编辑2. mybatis-plus插件 3.导入相关依赖 4.配置文件 5.前端代码 register.html style.css 6.后端代码 entity层 mapper层 sevice层 业务层接口 业务层实现类 controller层 7.调试 1. 未输…

【python】Django——连接mysql数据库

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——连接mysql数据库 连接MySQL数据库…

免费开源客服机器人tiledesk 实现一个查询天气机器人

第一步,槽位收集: 第二步:天气api接口调用: 效果展示:

基于电力需求侧能效管理平台的建设及应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:电力是国民经济和居民生活的命脉,为贯彻落实国家对于节能减排工作的总体部署,深入推进电力需求侧管理工作、本文从电力需求侧能效管理平台所要实现的功能与应用信息技术两个方面&#x…

windows上安装make

windows上安装make 1.使用包管理工具Cygwin:(官网:https://www.cygwin.com/) 来进行安装,根据上述网址找到cygwin下载链接(准确地址为:https://www.cygwin.com/setup-x86_64.exe) 2.在安装程序…

开发程序员的宝藏工具/网站

博主在这里收录各式各样的工具/网站,都是一些能够帮助开发、提高效率的好东西 博主会不断更新,更加欢迎大家把自己觉得好用的分享在评论区 记得收藏起来,免得以后找不到了 1.文本对比 在线文本差异对比,文本比对、文本比较工具 能够将两边的…

RNA模型可以帮助发现疾病机制和候选药物

今天为大家介绍的是来自Tehmina Masud, Amit Deshwar, Shreshth Gandhi, Brendan J. Frey团队的一篇论文。精确地对RNA生物学进行建模和预测一直是一个长期存在的挑战,对于变异解释和定制治疗的制定具有重要的临床意义。作者提出了一个RNA生物学的基础模型&#xff…

传统的纸质设备保养方式的痛点以及解决方案

传统的纸质设备保养方式,在现代企业管理中面临多种痛点,这些问题可能影响企业的运营效率和设备维护的效果。以下是一些主要痛点: 信息更新缓慢和访问不便:纸质记录的更新通常需要手动完成,这不仅耗时,而且在…

echarts:graph图表拖拽节点

需求:实现一个可视化编辑器,用户可以添加节点,并对节点进行拖拽编辑等 实现期间碰到很多问题,特意记录下来,留待将来碰到这些问题的同学,省去些解决问题的时间 问题1:节点的data如下&#xff0…

excel中vlookup用法

excel中vlookup用法 用法示例 参数说明 参数1:E1用于匹配的字段 参数2:E1:F4,匹配表格范围 参数3:要取的字段属于匹配表格范围的第几列 数据4:精确匹配

JumpServer2023漏洞复现合集

本文主要复现JumpServer2023年出现的大批量漏洞,既是分享也是为了记录自己的成长,近期会持续更新。 1. JumpServer MongoDB远程代码执行漏洞(CVE-2023-43651) 1.1 漏洞级别 高危 1.2 漏洞描述 经过身份验证的用户可以利用Mon…

CV计算机视觉每日开源代码Paper with code速览-2023.11.13

精华置顶 墙裂推荐!小白如何1个月系统学习CV核心知识:链接 点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构:Transformer】PolyMaX: Gener…

官网下载tomcat

1、Tomcat官网地址: https://tomcat.apache.org/ 2、下载以及安装步骤