前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在Jaeger和OpenTelemetry SDK混合环境中使用W3C Trace-Context

在Jaeger和OpenTelemetry SDK混合环境中使用W3C Trace-Context

作者头像
CNCF
发布于 2020-05-29 08:09:19
发布于 2020-05-29 08:09:19
2.4K00
代码可运行
举报
文章被收录于专栏:CNCFCNCF
运行总次数:0
代码可运行

作者: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是用于跟踪标识符和元数据的标准化传播格式。它包含两个标题:

  • traceparent——描述传入请求在其跟踪图中的位置。它对跟踪ID、parent跨度ID和标志集进行编码。
  • tracestate——使用一组名称/值对表示的特定于供应商的数据来扩展traceparent。这个头是可选的,例如,可以对租户名进行编码。

标准化的进程间上下文传播格式解决了这些问题:

  • 在不同供应商之间交换跟踪上下文
  • 不同跟踪供应商收集的跟踪的相关性(correlation)
  • 如果没有标准可遵循,中介体、云提供商和服务提供商可能会丢弃特定于供应商的元数据。

现在,让我们看看在与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工件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

跟踪器配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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格式的编程配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

参考

  • W3C Trace-Context: https://www.w3.org/TR/trace-context/
  • Jaeger客户端文档: https://www.jaegertracing.io/docs/latest/clientfeatures/
  • OpenTelemetry文档: https://opentelemetry.io/

感谢Yuri Shkuro和Gary Brown。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenTelemetry 实战:从零实现分布式链路追踪
之前写过一篇 从 Dapper 到 OpenTelemetry:分布式追踪的演进之旅的文章,主要是从概念上讲解了 Trace 在 OpenTelemetry 的中的场景和使用。
crossoverJie
2024/09/29
2440
Opentelemetry——Instrumentation-Libraries
Learn how to add native instrumentation to your library. 了解如何将本地测量装置添加到您的库中。
方亮
2024/05/24
1080
Opentelemetry——Instrumentation-Libraries
Language APIs & SDKs-C++-Instrumentation
Instrumentation for OpenTelemetry C++ OpenTelemetry C++测量装置
方亮
2024/05/24
850
今天我们聊聊 Trace 之 OpenTelemetry And TSW |概览
Trace 并不是一个新的概念,随着软件商业化伊始,如何迅速定位生产环境是工程师们不断探索的方向。早期的软件架构大多为 CS 结构(Client and Server)。每个语言为了提供方便快捷的方式让工程师解决问题,在 Log,Debug 和 Trace 上一直没少下功夫。
腾讯云中间件团队
2021/03/24
1.6K0
使用opentelemetry与jaeger实现flask应用的链路追踪
链路追踪是应用可观测性的重要组成部分,它可以帮助我们快速定位问题,提高应用的可用性和稳定性。 今天我们来看看如何使用 opentelemetry 与 jaeger 实现 flask 应用的链路追踪。
杜逸先
2023/04/13
1.9K0
使用opentelemetry与jaeger实现flask应用的链路追踪
探索 Jaeger 在微服务中的应用
笔者目前工作中就负责某电商系统的设计和开发,前端 Angular,后端 Java.
编程小妖女
2025/02/28
900
探索 Jaeger 在微服务中的应用
Java 应用通过 OpenTelemetry API 实现手动埋点
我们知道对于 Java 应用可以通过 OpenTelemetry 提供的 Java agent 来实现自动埋点功能,在大多数场景下也完全足够了,但是有时候我们需要更加精细的控制,这时候我们就需要使用手动埋点的方式来实现了。
我是阳明
2023/09/11
1.3K0
Java 应用通过 OpenTelemetry API 实现手动埋点
跨服务链路追踪:一次完整的 OpenTelemetry 使用实践
在现代的微服务架构中,一个用户请求可能需要跨多个服务才能完全处理。这样的复杂性可能会给诊断问题和性能优化带来挑战。因此,跨服务链路追踪技术的应用越来越受到关注。
运维开发王义杰
2023/08/10
2.5K0
跨服务链路追踪:一次完整的 OpenTelemetry 使用实践
OpenTelemetry架构介绍
摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/
charlieroro
2020/10/30
5.7K0
OpenTelemetry架构介绍
【微服务架构】从链路追踪到日志关联:打造分布式系统问题定位利器
微服务架构为系统带来了灵活性与扩展性,但也让问题定位变得更加复杂。服务间缺乏日志关联性是微服务调试和运维中的核心痛点之一。本文章将深入探讨如何通过分布式追踪、链路ID等技术实现服务间日志关联,并通过示例代码与工具展示如何落地这些方法。
网罗开发
2025/01/14
1470
【微服务架构】从链路追踪到日志关联:打造分布式系统问题定位利器
Opentelemetry——Signals-Trace
Understand the full path through your distributed application. 了解分布式应用程序的完整路径。
方亮
2024/05/24
990
Jaeger Client Go 链路追踪|入门详解
之前参加柠檬大佬的训练营(免费白嫖),在大佬的指导下我们技术蒸蒸日上,然后作业我们需要实现一个 Jaeger 后端,笔者采用 .NET + MongoDB 来实现(大佬说用C#写的扣10分,呜呜呜...),C# 版本的实现项目地址https://github.com/whuanle/DistributedTracing,项目支持 Jaeger Collector、Query 等。
痴者工良
2021/04/26
2.1K0
Jaeger引入了对OpenTelemetry的原生支持
最新的Jaeger v1.35 版本[1]引入了通过OpenTelemetry 协议(OTLP)[2]接收 OpenTelemetry 追踪数据的能力,所有 OpenTelemetry SDK 都需要支持该协议。这是之前宣布淘汰 Jaeger“经典”客户端库[3]的后续。
CNCF
2022/06/10
2K0
Jaeger引入了对OpenTelemetry的原生支持
拥抱 Agent,“0” 代码玩转 Trace 之 OpenTelemetry 系列第二弹!
自2006年以来,曾就职于SonyEricsson、SAP等多家公司,历任软件开发工程师,数据开发工程师,解决方案架构师
腾讯云中间件团队
2021/03/24
1.6K0
拥抱 Agent,“0” 代码玩转 Trace 之 OpenTelemetry 系列第二弹!
Opentelemetry 实践分享 - Golang篇
Opentelemetry 是一个CNCF社区下一个开源的可观测性框架,或者也可以说是一组工具、API 和 SDK 的集合,来检测、生成、收集和导出可观测性数据(指标、日志和链路),以帮助我们分析软件的性能和行为。
云原生小白
2023/08/28
4K0
Opentelemetry 实践分享 - Golang篇
2w字长文,让你瞬间拥有「调用链」开发经验
很多同学表示,对于微服务中常用的调用链功能的原理,感觉很模糊。本文将真正的从零开始,介绍调用链客户端开发的一些要点。让你瞬间拥有APM开发经验。文章很长很长,照例看一下相关目录。
xjjdog
2019/11/19
1.5K0
2w字长文,让你瞬间拥有「调用链」开发经验
分布式链路追踪
微服务架构 作为云原生核心技术之一,提倡将单一应用程序划分成一组小的服务(微服务),服务之间互相协调、互相配合,为用户提供最终价值。
gopher云原生
2021/10/18
1.3K1
(译)在 Istio 中使用 Opentracing Baggage 进行传播和路由
现代服务网格架构提供了很多的新功能,基础设施相关的依赖部分被逐步从代码中移除,极大的降低了编码工作量。除此之外,这一架构的智能路由功能还把金丝雀发布以及类似功能大大的简化了。
崔秀龙
2019/07/23
1.3K0
(译)在 Istio 中使用 Opentracing Baggage 进行传播和路由
Java应用日志如何与Jaeger的trace关联
本篇概览 经过《Jaeger开发入门(java版)》的实战,相信您已经能将自己的应用接入Jaeger,并用来跟踪定位问题了,本文将介绍Jaeger一个小巧而强大的辅助功能,用少量改动大幅度提升定位问题的便利性:将业务日志与Jaeger的trace关联 在正式开始前,咱们先来看一个具体的问题: 一次web请求可能有多条业务日志(log4j或者logback配置的那种),这和您写代码执行log.info的次数有关,假设有10条,那么十次请求就有一百条业务日志; 通过jaeger发现这十次请求中有一次耗时特别长,
程序员欣宸
2021/12/07
6690
Java应用日志如何与Jaeger的trace关联
OpenTelemetry - 云原生下可观测性的新标准
CNCF(Cloud Native Computing Foundation),中文为“云原生计算基金会”,CNCF是Linux基金会旗下的基金会,可以理解为一个非盈利组织。
全球技术精选
2021/01/21
1.2K0
OpenTelemetry - 云原生下可观测性的新标准
推荐阅读
相关推荐
OpenTelemetry 实战:从零实现分布式链路追踪
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验