首页 > 其他分享 >上个厕所的时间了解链路追踪基本概念

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

时间:2024-01-30 17:23:23浏览次数:35  
标签:span trace baggage context 链路 追踪 基本概念 SDK

大家好,我是蓝胖子,随着微服务的普及,在面对日益复杂的架构和请求链路时,链路追踪技术就显得更加重要,今天我们花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的规范。但是它们都会有传播者这个概念,只是各自的实现和遵循的协议不同。

标签:span,trace,baggage,context,链路,追踪,基本概念,SDK
From: https://www.cnblogs.com/hobbybear/p/17997534

相关文章

  • 【计网笔记】物理层的基本概念
    物理层的基本概念物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。现有的计算机网络中的硬件设备和传输媒体的种类非常繁多,而通信手段也有许多不同方式。物理层的作用正是要尽可能地屏蔽掉这些传输媒体和通信手段的差异,使物理层上面......
  • elasticSearch基本概念
    elasticSearch基本概念基本概念索引(index)es将数据存储在一个或多个索引中。es在内部使用Lucene将数据写入索引或者从索引汇总检索数据。es中的索引可能由一个或多个Lucene索引构成。文档(document)文档是es世界中的主要实体。文档由字段构成,每个字段包含字段名以及一个或多个字......
  • 生产环境出现 bug 自动生成异常追踪-SRE与开发自动化协同
    作者:观测云数据智能部产品方案架构师范莹莹简介生产环境bug的定义:RUM应用和APM应用的 error_stack 信息被捕捉后成为bug。以APM新增错误巡检为例,当出现新错误时,在观测云控制台的「事件」模块下生成新的事件报告,捕捉为bug。同时利用 DatafluxFunc 创建异常追踪,......
  • MSE/Istio 全链路灰度的挑战、实现思路与解决方案
    微服务架构下的灰度发布挑战在传统的单体应用架构中,灰度发布相对简单。只需要在服务的流量入口处进行分流,通过使用K8sService或各种类型的网关即可实现。然而,微服务架构引入了新的复杂性,服务之间的依赖关系错综复杂。有时候,某个功能的发布可能依赖于多个服务,要求灰度流量在整......
  • iOS ARKit--人脸检测追踪基础
        在计算机人工智能(ArtificialInteligence,AI)物体检测识别领域,最先研究的是人脸检测识别,目前技术发展最成熟的也是人脸检测识别。人脸检测识别已经广泛应用于安防、机场、车站、闸机、人流控制、安全支付等众多社会领域,也广泛应用于直播特效、美颜、Animoji等娱乐领域。......
  • 交换机配置-链路聚合
    一、链接聚合链路聚合(Eth-Trunk),是将多个物理接口捆绑为一个逻辑接口,实现增加链路带宽、提高可靠性、提供负载分担的目的。SW1[SW1]interfaceEth-Trunk1[SW1-Eth-Trunk1]modemanualload-balance//选择为手动负载分担,缺省即为手工模式[SW1-Eth-Trunk1]trunkportGig......
  • Kruise Rollout 全链路灰度实践
    作者:旦酱、十眠什么是全链路灰度?在发布应用的过程中,我们通常希望用少量特定流量来验证新版本的发布是否正常,以保障整体稳定性。这个过程被称为灰度发布。关于灰度发布,我们通过逐步增加发布的范围,来验证新版本的稳定性。如果新版本出现问题,我们也能及时发现,控制影响范围,保障整体的稳......
  • 什么是大模型?一文读懂大模型的基本概念
    大模型是指具有大规模参数和复杂计算结构的机器学习模型。本文从大模型的基本概念出发,对大模型领域容易混淆的相关概念进行区分,并就大模型的发展历程、特点和分类、泛化与微调进行了详细解读,供大家在了解大模型基本知识的过程中起到一定参考作用。本文目录如下:·大模型的定义......
  • 如何追踪和发现内部威胁,以防止员工数据泄露?
    在数字化的时代背景下,数据泄露已经成为企业面临的一大安全威胁。对于保护企业数据,大多数人可能首先想到的是来自网络的威胁,如黑客攻击或者恶意软件。然而,实际上,内部威胁同样不能忽视。员工或合作伙伴有时会无意间或故意泄露敏感数据,造成不可估量的损失。为了防止这种情况发生,企业......
  • 实时光线追踪降噪
    1单帧降噪在这个部分,你需要对有噪声的输入图像eC,使用联合双边滤波核J进行降噪,最终得到降噪后的图像C(J),我们的联合双边滤波核定义如下:\[J(i,j)=exp(−\frac{||i−j||^2}{2σ_p^2}−\frac{||C[i]−C[j]||^2}{2σ_c^2}−\frac{D_{normal}(i,j)^2}{2σ_n^2}−\fra......