链路追踪学习三:跨服务,跨进程追踪

简介: 链路追踪学习三:跨服务,跨进程追踪

traceId

首先,我们要了解,跨服务追踪需要有个traceId标识,以及其他需要传递的链路数据:

carrier := opentracing.HTTPHeadersCarrier{}  //声明一个数据载体
err := span.Tracer().Inject(span.Context(), opentracing.HTTPHeaders, carrier) //将span的数据格式化进载体
for key, value := range carrier {
   fmt.Printf("traceId: %v => %v \\n", key, value)
}

获取traceId以及组装父span做调用

获取到载体数据后,可通过http header,rpc等方式将数据传递,在调用方接收:

var carrierHeader http.Header
carrierHeader = http.Header(carrier)   //carrier为调用的数据,格式化为header
carrier := opentracing.HTTPHeadersCarrier{}
carrier.Set("uber-trace-id", traceId)  //记录traceId
tracer := opentracing.GlobalTracer() //声明tracer
wireContext, err := tracer.Extract( 
   opentracing.HTTPHeaders,
   opentracing.HTTPHeadersCarrier(header),
)
parentSpan := opentracing.StartSpan(
   "request-server",
   ext.RPCServerOption(wireContext))  //将carrier获得的数据存入新声明的span,这个span即为父span
defer parentSpan.Finish() //结束后完成该span
ctx = opentracing.ContextWithSpan(context.Background(), parentSpan) //通过该span获取上下文,之后的子span基于该上下文
//创建子span
span, _ := jaegerTool.WithSpan(ctx, "writeLog")
defer span.Finish() //结束后调用完成
span.LogFields(
   log.String("log", data),
)

最后结果:

image.png

相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
目录
相关文章
|
中间件
链路追踪学习四:gin集成jaeger
链路追踪学习四:gin集成jaeger
475 0
|
2月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
786 0
|
10月前
|
存储 监控 NoSQL
一文打通Sleuth+Zipkin 服务链路追踪
一文打通Sleuth+Zipkin 服务链路追踪
|
12月前
|
Dubbo 数据可视化 应用服务中间件
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(1)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(1)
141 0
|
12月前
|
Dubbo 数据可视化 应用服务中间件
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(2)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(2)
84 0
|
12月前
|
监控 Dubbo 数据可视化
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(3)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(3)
76 0
|
12月前
|
监控 Dubbo 数据可视化
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(4)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(4)
203 1
|
12月前
|
数据可视化 Dubbo 应用服务中间件
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(5)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(5)
91 1
|
12月前
|
存储 SQL Java
微服务实战05-服务链路追踪
微服务实战05-服务链路追踪
148 0
|
监控 Cloud Native 关系型数据库
链路追踪学习一:OpenTracing
链路追踪学习一:OpenTracing
149 0
链路追踪学习一:OpenTracing