网站站长如何赚钱,wordpress典,腾讯视频分享到wordpress,徐州市住房和城乡建设局网站大家好#xff0c;我是蓝胖子#xff0c;随着微服务的普及#xff0c;在面对日益复杂的架构和请求链路时#xff0c;链路追踪技术就显得更加重要#xff0c;今天我们花5分钟的时间#xff0c;来掌握和链路追踪相关的基本概念。不会涉及到具体的技术框架和落地#xff0c…大家好我是蓝胖子随着微服务的普及在面对日益复杂的架构和请求链路时链路追踪技术就显得更加重要今天我们花5分钟的时间来掌握和链路追踪相关的基本概念。不会涉及到具体的技术框架和落地本文主要是对链路追踪中涉及的专业术语做一个简短的介绍。 不同链路追踪的SDK可能对相关的专业术语有不同的称谓但它们所代表的含义和内容基本一致。 trace
trace 指完整的一条请求链路。有时也指在某个组件内的一条完整链路。
span
span可以理解成链路追踪过程中的一个小的阶段通常span会有如下的一些信息
span contextevent(logs)tag(attribute)statuskind
我们来依次看下它们代表什么含义
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都有其状态值分别是
UnsetErrorOk 显示trace数据的组件库在解析到这些状态值时会有不同的显示默认是unset为unset时表示链路追踪过程没有错误为Error时则表示有错误发生一般情况下不需要显示设置Ok状态设置ok状态说明是开发人员显示的设置为成功状态。
status本质上就是设置span的attribute比如我们通过OpenTelemetry SDK如下代码设置status时
span.SetStatus(codes.Error, fail)最终是设置了3个属性键值对 设置为错误的span在jaeger上还未有醒目的标记 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 上下文时传递给后一个进程那么就要用到baggagebaggage是一种标准(协议)提供了一种统一的方式来存储和传播信息。
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的规范。但是它们都会有传播者这个概念只是各自的实现和遵循的协议不同。