2019年5月,OpenCensus 和 OpenTracing形成了 OpenTelemetry(简称 OTel) 也就是说,我们在使用链路追踪SDK的时候就需要使用OpenTelemetry的新规范.OpenTelemetry帮我们实现了相应语言的SDK,所以我们只需要进
2019年5月,OpenCensus 和 OpenTracing形成了 OpenTelemetry(简称 OTel) 也就是说,我们在使用链路追踪SDK的时候就需要使用OpenTelemetry的新规范.OpenTelemetry帮我们实现了相应语言的SDK,所以我们只需要进行调用即可. 本文主要根据官方文档实例进行讲解. 例子本文简化了官方的例子,每个地方都已注释完毕! 例子使用jaeger作为链路追踪服务器. 首先我们先引入它的包.
当我们导入上面的包之后,就可以运行例子了.
原理运行成功了,那么它的底层原理是怎么实现的,每个组件是怎么组织的? 通过上面的图我们可以知道,跨度之间的传输使用的是Context 来实现的. 方法使用
newExporter它的作用是创建一个导出器
无论是使用agent还是Collector,导出器都 使用batchUploader,也就是批量上传策略. newResource存在于每个span中,在jaegerUI上显示的是tag下面的Process
这里并不强制使用resource.NewWithAttributes,只要返回值是 resource.Resource 即可 trace.NewTracerProvider创建一个链路生成器,我们主要使用它来进行链路追踪
这里重点讲解一下SpanProcessor.
otelotel是一个全局配置组件,我们可以将生成器设置为全局属性,方便调用。
注意具体的span使用请访问 获取当前跨度通过上面我们知道,对当前跨度的操作是使用span就可以了,但是在日常过程中我们不能传输两个值一个Context和span(通常只传输Context),所以可以使用Context逆向解析出当前的span.
:::success 设置span状态
设置span属性
记录错误
设置活动
tp.Shutdown注意在使用完后已经要调用Shutdown,它的功能是关闭客户端与链路服务器之间的连接,也就是我们为两个服务建立连接后为了防止资源浪费所以会调用 con.close() 即使关闭.
|
2022-04-28
2022-04-21
2022-05-13
2022-08-17
2022-02-25