作者:Pavol Loffay
在本文中,我们将了解如何使用带有W3C Trace-Context传播格式的Jaeger客户端。标准化的上下文传播格式,确保了不同跟踪系统和工具库之间的互操作性。在这方面,我们将探讨两个用例。首先,如何在Jaeger测仪环境中使用OpenTelemetry SDK。这个场景模拟了不同跟踪系统之间的互操作性,也模拟了从Jaeger客户端到OpenTelemetry SDK的迁移路径。在第二个用例中,我们将配置Jaeger原生客户端以使用W3C Trace-Context。
W3C Trace-Context
在深入讨论主要主题之前,让我们先了解一下W3C Trace-Context。W3C Trace-Context是用于跟踪标识符和元数据的标准化传播格式。它包含两个标题:
标准化的进程间上下文传播格式解决了这些问题:
现在,让我们看看在与Jaeger原生客户端混合的环境中OpenTelemetry Java SDK的配置。
使用Jaeger上下文传播格式配置OpenTelemetry SDK
在本节中,我们将了解在使用Jaeger原生客户端检测的环境中OpenTelemetry Java SDK的配置。当我们希望引入使用OpenTelemetry工具的新服务时,这个用例非常重要,它还展示了不同跟踪工具之间的互操作性。在混合环境中,我们必须确保所有检测库都理解相同的传播协议。
由于无法重新编译和重新部署现有服务以使用新的上下文传播格式,因此必须配置新服务以同时理解新的和旧的传播格式。下面是一个简单的图,其中显示了三个微服务A、B和X。只有服务X同时使用传播协议——Jaeger和W3C Trace-Context。这确保“遗留的”Jaeger服务能够继续由服务X启动的跟踪,反之亦然。
图中显示了使用OpenTelemetry工具的服务X,以及使用Jaeger工具的服务A和B。
现在让我们看一下代码。我们将配置OpenTelemetry Java SDK,以同时使用默认的W3C Trace-Context和Jaeger格式。首先,让我们为SDK和Jaeger上下文传播格式添加OpenTelemetry maven工件:
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>0.4.1</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-contrib-trace-propagators</artifactId>
<version>0.4.1</version>
</dependency>
跟踪器配置:
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.contrib.trace.propagation.JaegerPropagator; import io.opentelemetry.trace.propagation.HttpTraceContext;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation
.DefaultContextPropagators;
ContextPropagators contextPropagators = DefaultContextPropagators.builder()
.addHttpTextFormat(new JaegerPropagator())
.addHttpTextFormat(new HttpTraceContext())
.build();
OpenTelemetry.setPropagators(contextPropagators);
Tracer tracer = OpenTelemetry.getTracerProvider().get("io.example");
Span span = tracer.spanBuilder("operation").startSpan();
...
现在,将跟踪程序配置为同时使用W3C Trace-Context和Jaeger传播格式进行上下文注入和提取。遗留的Jaeger工具将识别Jaeger传播格式并删除W3C Trace-Context。
使用W3C Trace-Context配置Jaeger客户端
Jaeger原生客户端可以配置为使用定制的上下文传播格式。对W3C Trace-Context的支持通常直接在核心工件中提供。它可以通过编程方式配置,也可以通过环境变量JAEGER_PROPAGATION=w3c配置。
下面的代码片段显示了同时配置Jaeger和W3C Trace-Context格式的编程配置。
import io.jaegertracing.Configuration;
import io.jaegertracing.Configuration.Propagation;
Configuration configuration = Configuration.fromEnv("io.example");
configuration.getCodec()
.withPropagation(Propagation.W3C)
.withPropagation(Propagation.JAEGER);
JaegerTracer jaegerTracerWith = configuration.getTracer();
总结
在本文中,我们展示了如何在Jaeger原生客户端的异构环境中使用OpenTelemetry SDK,以及如何在Jaeger客户端中配置W3C Trace-Context。
参考
感谢Yuri Shkuro和Gary Brown。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有