上个厕所的时间了解链路追踪基本概念

2024-01-30 21:36

本文主要是介绍上个厕所的时间了解链路追踪基本概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是蓝胖子,随着微服务的普及,在面对日益复杂的架构和请求链路时,链路追踪技术就显得更加重要,今天我们花5分钟的时间,来掌握和链路追踪相关的基本概念。不会涉及到具体的技术框架和落地,本文主要是对链路追踪中涉及的专业术语做一个简短的介绍。

不同链路追踪的SDK可能对相关的专业术语有不同的称谓,但它们所代表的含义和内容基本一致。

trace

trace 指完整的一条请求链路。有时也指在某个组件内的一条完整链路。

span

span可以理解成链路追踪过程中的一个小的阶段,通常span会有如下的一些信息

  • span context
  • event(logs)
  • tag(attribute)
  • status
  • kind

我们来依次看下它们代表什么含义,

span context

指span的上下文信息,通过在不同进程间传递这个上下文信息,能够将不同进程的链路拥有串联在一起。通过span context会包含trace id(一条完整的链路拥有一个唯一的trace id) 和span id(一个span拥有的唯一id)。

event(logs)

event记录 一个小阶段span中某些特别的时间点事件, 有时也在某些Trace相关的SDK中称为log,类似与下面的代码进行设置

span.AddEvent("test",  trace.WithStackTrace(true),  trace.WithTimestamp(time.Now()))

记录的时候可以将程序的堆栈和时间戳同时记录下来。

tag(attribute)

span可以设置键值对,被称作为span打上标签tag,有时也被成为span的属性attribute

status

openTelemetry SDK规定每个span都有其状态值,分别是

  • Unset
  • Error
  • Ok
    显示trace数据的组件库在解析到这些状态值时会有不同的显示,默认是unset,为unset时表示链路追踪过程没有错误,为Error时则表示有错误发生,一般情况下不需要显示设置Ok状态,设置ok状态说明是开发人员显示的设置为成功状态。

status本质上就是设置span的attribute,比如我们通过OpenTelemetry SDK如下代码设置status时

span.SetStatus(codes.Error, "fail")

最终是设置了3个属性键值对

Pasted image 20240130160041.png

设置为错误的span在jaeger上还未有醒目的标记

Pasted image 20240130161050.png

status这个改变可能在使用其他trace 相关的SDK时是没有的,比如OpenTracing 规范中没有提及这个概念。

kind

kind本质上也是为span设置键值对属性,同样它也是OpenTemetry SDK规定的,其他trace相关的SDK可能没有。

创建 Span 时,它是 Client、Server、Internal、Producer 或 Consumer 之一。根据 OpenTelemetry 规范,服务器 Span 的父级通常是远程客户端 Span,客户端 Span 的子级通常是服务器 Span。类似地,消费者 Span 的父级始终是生产者,生产者 Span 的子级始终是消费者。如果未提供,则假定跨度类型是内部的。

其实kind和status的设置并不是强制的,都是起到提示的作用,为了更好的区分链路数据各个span之间的关系或者标记span。

baggage

因为链路追踪涉及到跨进程,当想把前一个进程的某些信息随着传递trace 上下文时传递给后一个进程,那么就要用到baggage,baggage是一种标准(协议),提供了一种统一的方式来存储和传播信息。

w3c规定了baggage的协议格式 https://www.w3.org/TR/baggage/.

也就是说只要客户端和服务端都按上述的协议封装和解析,那么对端就能解析出baggage中的信息。

propagator

传播者propagator 负责将刚才提到的span context和 baggage 传递到下个进程中,同时它也具有解析其他进程传递过来的span context和 baggage的功能。

这里会涉及到进程间传递信息的具体方式,w3c也规定了在http中传递span context的方式,在http头部设置固定的和trace相关的请求头,对端也必须从这些请求头来解析trace数据。

propagator 是遵循span context 和baggage 数据传递规范的具体实现。

注意, 在跨进程传递时,并不是每种trace SDK都是遵循W3C规范的,比如zipkin 的SDK在跨进程传递trace数据时,使用的http请求头就和W3C规定的不同,而OpenTelemetry SDK 则是完全遵循了W3C的规范。但是它们都会有传播者这个概念,只是各自的实现和遵循的协议不同。

这篇关于上个厕所的时间了解链路追踪基本概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661621

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

20170723 做的事 ecdsa的签名验证时间短于bls signature

1 今天在虚拟机 /home/smile/Desktop/20170610/Test//time_ecdsa 文件夹下,找到ecdsa的验证时间是 989.060606μs μs 先 make ,然后run。 再取BLS的签名生成时间: ./run  2  gnuplot 画图,画对比的时间 gnuplot 画图参考教程 http://blog.sciencen

Python几种建表方法运行时间的比较

建立一个表[0,1,2,3.......10n],下面几种方法都能实现,但是运行时间却截然不同哦 import time#方法一def test1(n):list=[]for i in range(n*10):list=list+[i]return list#方法二def test2(n):list=[]for i in range(n*10):list.append(i)#方法三d

@ControllerAdvice:你可以没用过,但是不能不了解

1.概述 最近在梳理Spring MVC相关扩展点时发现了@ControllerAdvice这个注解,用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用 @ControllerAdvice,可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理,从而减少代码重复,提升代码的可维护性。 定义如下 /*** Specialization of {@link Component @

【Qt6.3 基础教程 16】 掌握Qt中的时间和日期:QTimer和QDateTime的高效应用

文章目录 前言QTimer:定时任务的强大工具QTimer的基本用法高级特性:单次定时器 QDateTime:处理日期和时间获取当前日期和时间日期和时间的格式化输出日期和时间计算 用例:创建一个倒计时应用结论 前言 在开发桌面应用程序时,处理时间和日期是一个常见且重要的任务。Qt框架提供了强大的工具来处理与时间相关的功能,其中QTimer和QDateTime是最核心的类。本

Linux之时间显示

在linux中使用使用date的方式来显示时间,但是如果想按照自己想要的格式展示,那就需要加上一点参数了 显示当前时间 date 2024年 06月 23日 星期日 23:21:42 CST 显示当前年份 date +%Y 2024 显示当前月份 date +%m 6 显示当前日期 date +%d 23 自定义显示格式 date "+%Y-%m-%d

音视频开发基础知识(1)——图像基本概念

像素 **像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。**在下面这张图中,你可以看到一个个方块,这些方块就是像素。 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。