当前位置: 首页 > news >正文

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

什么是火焰图?

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

链路追踪与 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)的平均值、执行时间以及执行时间占比。

结论

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

相关文章:

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

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

中睿天下Coremail | 2023年Q3企业邮箱安全态势观察报告

10月25日,北京中睿天下信息技术有限公司联合Coremail邮件安全发布《2023年第三季度企业邮箱安全性研究报告》。2023年第三季度企业邮箱安全呈现出何种态势?作为邮箱管理员,我们又该如何做好防护? 以下为精华版阅读,如需…...

HBuilderX vue项目打包上传到服务器

完成后有个’dist’目录,把真个目录通过FTP 上传到服务器,Mac电脑使用cyberduck 上传 服务器使用‘宝塔’进行一件部署,基本上就是傻瓜式的点击下一步...

2656. K 个元素的最大和 --力扣 --JAVA

题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次,最大化你的得分: 从 nums 中选择一个元素 m 。 将选中的元素 m 从数组中删除。 将新元素 m 1 添加到数组中。 你的得分增加 m 。 请你返回执行以上操作恰好 k …...

从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器

WEB服务器 1. HTTP协议1.1 HTTP-概述1.1.1 介绍1.2.2 特点 2.2 HTTP-请求协议2.3 HTTP-响应协议2.3.1 格式介绍2.3.2 响应状态码 2.4 HTTP-协议解析 2. WEB服务器-Tomcat2.1 简介2.1.1 服务器概述2.1.2 Web服务器2.1.3 Tomcat 2.2 基本使用2.2.1 下载2.2.2 安装与卸载2.2.3 启动…...

百度搜索智能化算力调控分配方法

作者 | 泰来 导读 随着近年深度学习技术的发展,搜索算法复杂度不断上升,算力供给需求出现了爆发式的增长。伴随着AI技术逐步走到深水区,算法红利在逐步消失,边际效应日益显著,算力效能的提升尤为重要,同时随…...

如何搭建接口自动化测试框架?

经过了一年多的接口测试工作,旧的框架也做了一些新的调整,删除了很多冗余的功能,只保留了最基本的接口结构验证、接口回归测试、线上定时巡检功能。 一、框架的演进 界面 UI 做了优化,整个框架的画风突然不一样了(人靠…...

ubuntu 20.04+ORB_SLAM3 安装配库教程

目录 安装ros(如果只是运行ORB-SLAM3,可以跳过安装)0. ros 安装教程1. 安装opencv2. 安装Pangolin3. 安装Eigen34.安装Python & libssl-dev5.安装boost库6.安装ceres库(不必须)7.安装Sophus库(不必须)8. 安装g20库…...

Poly风格模型的创建与使用_unity基础开发教程

Poly风格模型的创建与使用 安装Poly相关组件Poly模型的创建Poly模型编辑 安装Poly相关组件 打开资源包管理器Package Manager 在弹出的窗口左上角Packages选择Unity Registry 搜索框搜索 Poly 搜索结果点击Polybrush 点击右下角 Install 同时也别忘了导入一下模型示例&#…...

终于有人把VMware虚拟机三种网络模式讲清楚了!

前段时间VMware更新了,你用上最新版了吗? 有几个网工在操作中遇到过各种各样的问题。 比如说由于公司服务器重启导致出现下面的问题:在Xshell里连接虚拟机映射时连接失败;能够连接上虚拟机的映射地址,但git pull时报…...

Flutter实践二:repository模式

1.repository 几乎所有的APP,从简单的到最复杂的,在它们的架构里几乎都包括状态管理和数据源这两部分。状态管理常见的有Bloc、Cubit、Provider、ViewModel等,数据源则是一些直接和数据库或者网络客户端进行交互,取得相应的数据&…...

交换机Vlan和端口配置(H3C)

交换机Vlan配置(H3C) 配置VLAN配置VLAN接口的IP地址开启ARP网关保护功能,配置被保护的网关IP地址 配置VLAN Vlan物理端口3GigabitEthernet 1/0/1 ~ GigabitEthernet 1/0/14 ;GigabitEthernet 2/0/1 ~ GigabitEthernet 2/0/1450Gi…...

vue自定义指令控制权限

1、在main.js中注册全局指令 import Vue from vue;// 按钮权限控制指令 Vue.directive(permission, {inserted: (el, binding)>{const { value } binding;// 判断当前用户是否拥有该按钮权限if (!checkPermission(value)) {el.parentNode.removeChild(el);}} }); // 判断…...

jquery获取url参数

使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作,下面通过文字说明加代码分析的形式给大家解析,具体详情请看下文。 1、jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javascript的基…...

SpringBoot和Spring源码下载

1.下载:在一个空的干净地创建一个文件夹叫springsourcecode,其实叫什么都行的。 git clone https://github.com/spring-projects/spring-framework.git 2.JDK要和gradle匹配 我们要21的,今天为止2023年11月13日,idea是2023.2。 …...

【算法练习Day49】每日温度下一个更大元素 I

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 每日温度下一个更大元素 I总…...

Maven打包时跳过测试代码

Maven 打包时会把一些用于测试的类或文件也一起打包,无疑增加了打包失败的风险,也加剧了文件占用磁盘的大小。 所以本次写一下如何跳过测试类。 命令行方式跳过测试 我们可以用两种命令来跳过测试 mvn clean package -DskipTestsmvn clean package -D…...

2023-2024 年适用于 Windows 电脑的顶级视频录制软件

想捕捉您正在在线观看的视频吗?使用网络摄像头录制视频会议以供日后参考。正在寻找可以完成这些任务的视频捕捉软件?这篇文章说明了一切。以下是一些适用于 Windows PC 的最佳视频录制工具。 什么是视频录制软件? 顾名思义,视频捕…...

2023-11-14 mysql-主从复制-重置主从连接-记录

摘要: mysql的主从复制, 当从库执行binlog出错后, 会中止主从复制. 此时需要重置主从连接, 以重建主从关系. 主库操作: 一. 清理同步的数据库 drop database test;二. 重置主库状态 reset master;reset slave all;三. 检测主库状态 show master status;mysql> show master…...

go语言学习之旅之安装sdk环境,hello world!

学无止境 为什么学习Go语言 高效编程: Go语言被设计为一门高效的编程语言。其编译速度快,执行速度也相对较快,适合用于构建高性能的应用程序。 并发支持: Go语言天生支持并发编程,通过goroutine和channel提供了简单而…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...