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

链路追踪可视化利器之火焰图

随着现代化技术的发展,为了能够保证 IT 系统的稳定性、高扩容性,企业往往采用分布式的方式来构建 IT 系统。但也正因为如此,IT 系统中涉及到的服务和组件可能被分布在不同的服务器、数据中心甚至不同的地理位置,这导致应用发生故障时从架构上我们很难追踪到实际发生问题的节点位置。链路追踪是监控和诊断这些分布式系统的关键技术之一,通过链路追踪我们可以更直观的了解用户请求路径,分析应用服务之间的交互依赖调用甚至可以快速识别定位发生错误的位置。

火焰图是链路追踪数据可视化分析的利器,通过持续时间和不同颜色的水平条形来表示请求执行路径中的每个服务的代码调用,帮助开发人员识别和解决应用程序中的瓶颈问题。本文将通过一些示例拆解说明观测云火焰图的实际绘制逻辑以及如何进行图表数据的分析查看。

在了解火焰图的绘制原理之前,我们以一个小示例先来了解下什么是 Trace。

什么是 Trace

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

火焰图

观测云的火焰图正是基于上述概念将一个完整的 Trace 通过图表的方式直观的展示并支持分析。

基础概念

在使用火焰图来查看 Trace 的信息之前,我们先来了解一下火焰图的基本绘制逻辑:

  • 纵轴:也称 Y 轴,代表了当前 Trace 调用 Span 的层级深度,从上往下则表示程序执行片段之间的调用关系:上面为父级 Span,下面的为子级 Span,Trace 的顶层 Span 我们又称 Root Span。
  • 横轴:也称 X 轴,代表了当前 Trace 执行的持续时间,Span 通过色块显示其持续时间,一个色块的宽度越大,则说明该 Span 的从开始到结束的持续时间较长,同时也是可能造成性能瓶颈的原因。
  • 连接线:若存在相同层级上存在多个 Span 且 Span 的执行时间存在重叠,则会采用连接线的方式将相关 Span 拉到下方展示区域显示,以便更直观的看到 Span 的执行情况。

指标定义

此处指标特指火焰图展示的指标数值,火焰图的数据来源均为链路数据。

Span 持续时间

持续时间通常指的是 Span 的开始时间到结束时间之间的间隔,一般由链路数据原生提供支持。

Span 执行时间

执行时间是指一个操作或事件真正开始执行到完成所需的时间。这个时间可能包括了等待时间(例如,等待资源、等待前一个操作完成等)和真正的处理时间。因此实际执行时间通常小于或等于 Span 的持续时间,因为Span的持续时间还包括了等待时间。(此指标数据当前由观测云后计算得出)

  • 同步情况下,执行时间计算

(1) 子 Span 结束时间 >= 父 Span 结束时间

(2) 子 Span 结束时间 < 父 Span 结束时间

  • 异步情况下,执行时间计算

(1) 存在 2 个子 Span 执行有重叠

(2) 复杂的异步场景示例

服务执行时长

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

服务执行占比

服务执行占比 = 服务执行时长 / Trace 执行总长 * 100%

Trace 执行时间总长

一般情况下,存在以下两种情况:

1、Root span 的执行结束时间 > 所有 Span 的执行结束时间,则 Trace 的执行时间总长 = Root Span 的持续时间

2、Root span 的执行结束时间 < 某个或某些 Span 的执行结束时间,则 Trace 的执行时间总长 = Span 最晚的执行结束时间 - Root Span 的执行开始时间

场景示例

1、登录观测云工作空间,查看服务性能指标列表,从页面已经可以看出 df-front-api 服务的 P90 响应时间是比较长的。

2、点击服务进入分析看板,通过【资源调用分析】列表可以看出,当前服务发起的资源调用里面 query_data 这个资源的耗时是比较长的,这个是观测云的一个数据查询接口,接下来我们看下这个接口在查询过程当中,到底是因为什么导致耗时较长。

3、下钻到链路查看器,筛选此资源,通过点击 持续时间 列表做一下数据排序找到持续时间最长的那条链路。

4、点击数据进入链路详情页,点击右上角【全屏】模式按钮,全屏查看当前 Trace 火焰图,从火焰图中我们可以看出整个 Trace 链路里面执行时长占比比较大的是 kodo-inner 这个服务。

5、点击选中 kodo-inner 服务的关联 Span,我们可以通过关联标签页发现在此 Span 执行过程中发现 7 条日志数据,点击展示日志页面,我们可以看出红框截出的这条日志内记录了实际耗时比较长的这条 DQL 查询语句以及查询时间范围,通过 time_range 参数值可以看出来是因为选中的查询时间范围有 16 小时导致的耗时较长。

总结

在本文中,我们深入探讨了链路追踪技术的核心概念,特别是火焰图在监控和诊断分布式 IT 系统中的关键作用。火焰图以其独特的可视化方式,通过纵轴和横轴的层级深度和执行持续时间,清晰地展示了服务间的调用关系和性能瓶颈。通过火焰图,我们能够精确地识别出影响系统性能的关键 Span,计算出服务的执行时长和服务执行占比,从而为性能优化提供了有力的数据支持。文章通过实际案例,展示了如何利用火焰图分析服务性能,定位问题,并采取相应的优化措施。火焰图不仅增强了我们对分布式系统复杂性的理解,也为提升系统稳定性和效率提供了有效的工具。随着技术的不断进步,火焰图将继续在IT系统的监控和优化中发挥其不可或缺的作用。

相关文章:

链路追踪可视化利器之火焰图

随着现代化技术的发展&#xff0c;为了能够保证 IT 系统的稳定性、高扩容性&#xff0c;企业往往采用分布式的方式来构建 IT 系统。但也正因为如此&#xff0c;IT 系统中涉及到的服务和组件可能被分布在不同的服务器、数据中心甚至不同的地理位置&#xff0c;这导致应用发生故障…...

C语言 ——— 条件编译指令实际用途

目录 前言 头文件被包含的方式 嵌套文件包含 使用条件编译指令规避头文件多次包含 还有一个编译指令&#xff0c;同样能做到以上功能 前言 条件编译指令多用于对头文件的定义和判断以及删除 头文件被包含的方式 本地文件包含&#xff08;也就是自己创建的头文件&#xff…...

备战软考Day01-计算机系统

1.数值及其转化 1.数值转化&#xff08;十进制&#xff09; 2.十进制推广 3.进制转化 4.数据表示 1.原码 2.反码 3.补码 4.移码 5.定点数 就是小数点的位置固定不变的数。小数点的位置通常有两种约定方式&#xff1a;定点整数(纯整数&#xff0c;小数点在最低有效数值位之后…...

从C语言过渡到C++

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;C &#x1f3c5;往期回顾&#x1f3c6;&#xff1a;单链表实现&#xff1a;从理论到代码-CSDN博客&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱的博客-CSDN博客 目录 ​…...

Docker 的安装和使用

参考资料&#xff1a; 通俗易懂了解什么是docker?Docker 教程 | 菜鸟教程Ubuntu 22.04 安装 DockerDocker 超详细基础教程WSL2 支持 systemctl 命令systemd 和 systemctl 是什么&#xff1f;使用正确的命令重启 WSL 子系统Ubuntu 修改源镜像方法Docker 中出现 ‘/etc/resolv.…...

鸿蒙轻内核A核源码分析系列七 进程管理 (2)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 轻内核A核源码分析系列一 数据结构-双向循环链表 轻内核A核源码分析系列二 数据结构-位图操作 轻内核A核源码分析系列三 物理内存&#xff08;1&#xff0…...

关于TypeScript使用讲解

TypeScript讲解 安装环境 1.安装node js 配置环境变量 2.在终端中 运行 npm i -g typescript typescript: 用于编译ts代码 提供了 tsc命令 实现了将 TS>>>> JS转换 验证: tsc -v 编译并运行 TS代码 1.创建ts文件&#xff08;TS文件为后缀名的文件&#xff0…...

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; static const int MASK1 1 << 7; static const int MASK2 (1 << 7) (1 << 6);bool isValid(int num) {return (num & MASK2) MASK1; }int getBytes(int num) {if ((num & MASK1) 0) {return 1;}int n 0;in…...

Netty权威指南:Netty总结-编解码与序列化

第四章 TCP粘包/拆包问题 4.1 TCP 粘包/拆包 TCP是流协议&#xff0c;也就是没有界限的的一串数据&#xff0c;底层并不知道上层业务数据的具体含义&#xff0c;也就是说一个完整的包可能会被拆分成多个包进行发送&#xff0c;也可能把几个小包封装成一个大的数据包发送。这就…...

FIDAVL:基于视觉语言模型的假图像检测与归因 !

FIDAVL:基于视觉语言模型的假图像检测与归因 &#xff01; 这份完整版的大模型 AI 学习资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 作者提出了FIDAVL&#xff1a;使用视觉语言模型进行虚假图像检测。FIDAVL是一…...

如何通过海外云手机提升运营效率

随着技术的不断进步&#xff0c;市场上出现了越来越多的提高跨国电商运营效率的应用&#xff0c;海外云手机就是其中一个。海外云手机的优势体现在多个方面&#xff0c;那么如何通过使用海外云手机来提升运营效率&#xff1f;可以从以下几个方面了解。 首先&#xff0c;海外云手…...

数据库4个范式的说明

在数据库设计中&#xff0c;范式&#xff08;Normal Form&#xff09;用于消除冗余和异常&#xff0c;确保数据一致性。以下是第一范式、第二范式、第三范式和BCNF&#xff08;Boyce-Codd Normal Form&#xff0c;即第四范式&#xff09;的示例说明&#xff1a; 1. 第一范式&a…...

Excel怎么截图?快速捕捉工作表的多种方法

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f4f8; 在日常工作中&#xff0c;我们经常需要对Excel工作表进行截图&#xff0c;无论是为了记录数据、制作演示还是进行数据对比。今天&#xff0c;我们就来学习几种在Excel中截图的方法以及它们的快捷键。 一、使…...

MyBatis动态SQL标签总结、开发手册、高阶用法(动态SQL、OGNL、批量操作、片段重用、 SQL 组合、 执行优化、嵌套查询与延迟加载)

MyBatis提供了一个非常强大的动态SQL功能&#xff0c;它使用了一组XML标签来帮助我们根据不同条件生成动态SQL。动态SQL的设计让开发者可以根据业务需求&#xff0c;灵活地构建SQL查询语句。以下是MyBatis动态SQL标签的总结。 动态SQL标签说明特点<if>条件判断语句&…...

出处不详 取数游戏

目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环&#xff0c;规则如下&#xff1a; 第一名玩家随意选取数字&#xff1b;第二名玩家从与第一名玩家相邻的两个数字中选择一个&#xff1b;而后依次在…...

拉取ros2_control_demos存储库

目录 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 方法 2: 使用 vcs 工具管理多个存储库 区别总结 rosdep 和 APT 的关系 网络问题 安装依赖 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 下载存储库&#xff1a; mkdir -p ~/ros2_ws/src cd ~/ros…...

Apache Doris Flink Connector 24.0.0 版本正式发布

亲爱的社区伙伴们&#xff0c;Apache Doris Flink Connector 24.0.0 版本已于 2024 年 9 月 5 日正式发布。该版本新增了对 Flink 1.20 的支持&#xff0c;并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。此外&#xff0c;整库同步所依赖的 FlinkCDC&#xff0c;也需升级…...

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先&#xff0c;使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处&#xff0c;同时将语音声控模…...

万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!

《万龙觉醒》是一款策略类手游&#xff0c;选择合适的英雄阵容搭配能够极大提升战斗效果。而借助VMOS云手机的辅助功能&#xff0c;玩家可以更加轻松地管理游戏进程&#xff0c;优化操作体验。以下是VMOS云手机的三大核心功能&#xff0c;帮助你更好地掌控《万龙觉醒》战局。 V…...

【English】长难句翻译

这里写目录标题 技巧知识点1. 定语从句 和 状从区别2. 定从 修饰词3. who 和 whom 区别4. 除了定从、状从,还有啥?5. 怎么在长难句快速定位到主谓宾而不被各种从句中的动词影响判断6. 没有,的那种一大堆从句连起来的长难句怎么办7. 时态怎么放在翻译里总结技巧 知识点 1. 定语…...

npm login 或者 npm publish 超时timeout

场景&#xff1a;空闲时间想自己尝试下npm发布包&#xff0c;毕竟这东西可以不用&#xff0c;但不能不会 步骤很简单 1.npm login 2.npm publish 这里有个坑。。。因为想发布到npm上&#xff0c;所以这里的镜像源要换回https://registry.npmjs.org&#xff0c;不能使用淘宝镜像…...

Python的openpyxl使用記錄(包含合併單元格,圖片下載和圖片插入,設置邊框,設置背景顏色)

背景 因為公司最近要求我做一份自動化導出報告&#xff0c;內容有點多&#xff0c;為了省事&#xff0c;我選用了python&#xff0c;後面估計要自建在線辦公系統&#xff0c;這個後續再講 需要的庫 openpyxl 和Pandas 開始 Execl導入 from openpyxl import load_workbook …...

基于springboot+vue实现的在线商城系统

系统主要功能&#xff1a; &#xff08;1&#xff09;商品管理模块&#xff1a;实现了商品的基本信息录入、图片上传、状态管理等相关功能。 &#xff08;2&#xff09;商品分类模块&#xff1a;实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 &#xff08;3&…...

fastjson漏洞--以运维角度进行修复

文章目录 前言一、漏洞详情二、修复过程1.通过脚本方式修复1.1.脚本修复原理1.2.脚本演示1.3.执行脚本 2. 手动升级包2.1.修复步骤2.2.遇到的问题 前言 该漏洞是三个月前由安全团队扫描出来的&#xff0c;主要影响是: FastJSON是阿里巴巴的开源JSON解析库&#xff0c;它可以解…...

82页精品PPT | 构建数字化工厂的智能制造-数字化智能制造

新模式、新技术 、新制造的挑战 中国制造业正处于转型升级的关键时期&#xff0c;面临着多方面的挑战。创新能力不足导致产品同质化严重&#xff0c;缺乏核心竞争力&#xff1b;质量管理水平参差不齐&#xff0c;影响着产品的可靠性和安全性&#xff1b;品牌价值不高&#xff…...

Python的10个日期和时间操作的实用技巧

在Python中&#xff0c;处理日期和时间是一项常见且重要的任务。datetime模块提供了丰富的功能来执行这些操作。以下是10个日期和时间操作的实用技巧及其代码演示&#xff1a; 1. 获取当前日期和时间 from datetime import datetimenow datetime.now() print(f"当前日期…...

关于大模型在产品开发中所面临的问题,利用大模型技术解决很简单!

“ 具体问题具体分析&#xff0c;大模型技术没有统一的解决方案 ” 有人说2024年是大模型应用的元年&#xff0c;而大模型在未来的发展潜力毋庸置疑&#xff0c;这也就意味着人工智能技术是下一个风口&#xff0c;因此各种各样基于大模型技术的创业公司如雨后春笋般涌现。 从…...

SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)

文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道&#xff0c;用ResponseBody注解标注的接口&#xff0c;默认返回给页面的是json数据。 其实&#xff0c;也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…...

BUUCTF 之Basic 1(BUU LFI COURSE 1)

1、启动靶场&#xff0c;会生成一个URL地址&#xff0c;打开给的URL地址&#xff0c;会看到一个如下界面 可以看到是一个PHP文件&#xff0c;非常的简单&#xff0c;就几行代码&#xff0c;判断一下是否有一个GET的参数&#xff0c;并且是file名字&#xff0c;如果是并且加载&a…...

Android 蓝牙三方和动态权限三方

记录一下最近用到的简单的框架 蓝牙 FastBle&#xff1a;Android BLE通信库的介绍与高级用法 - 简书 https://github.com/Jasonchenlijian/FastBle 动态权限: GitHub - googlesamples/easypermissions: Simplify Android M system permissions 位置权限举例,arrayOf中多个…...