前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jaeger引入了对OpenTelemetry的原生支持

Jaeger引入了对OpenTelemetry的原生支持

作者头像
CNCF
发布2022-06-10 14:27:41
1.5K0
发布2022-06-10 14:27:41
举报
文章被收录于专栏:CNCFCNCF

作者:Yuri Shkuro

最新的Jaeger v1.35 版本[1]引入了通过OpenTelemetry 协议(OTLP)[2]接收 OpenTelemetry 追踪数据的能力,所有 OpenTelemetry SDK 都需要支持该协议。这是之前宣布淘汰 Jaeger“经典”客户端库[3]的后续。

有了这项新功能,不再需要将 Jaeger 导出器与 OpenTelemetry SDK 一起使用,也不再需要在 Jaeger 后端运行 OpenTelemetry 收集器。使用 OTLP 导出器,SDK 可以配置为将数据直接发送到 Jaeger 后端。OTLP 接收器通过 gRPC 或 HTTP 端点接受数据。

Primer

让我们来看看这个功能的运行情况。首先,按照入门文档[4]中的说明启动 Jaeger 一体机:

代码语言:javascript
复制
docker run --name jaeger \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  jaegertracing/all-in-one:1.35

请注意,与以前的版本相比:

  1. 导出列表中还添加了两个端口,4317 和 4318,OTLP 接收器使用它们来监听 gRPC 和 HTTP 连接。
  2. OTLP 接收器必须通过 COLLECTOR_OTLP_ENABLED=true 使能。
  3. 我们删除了与本例无关的其他端口。

当 Jaeger 后端启动时,你应该会看到这两行日志:

代码语言:javascript
复制
{... "msg":"Starting GRPC server on endpoint 0.0.0.0:4317"}
{... "msg":"Starting HTTP server on endpoint 0.0.0.0:4318"}

和往常一样,Jaeger UI 可以在http://localhost:16686/访问。

现在让我们使用一个简单的 Python 程序,它用 OTLPSpanExporter 配置 OpenTelemetry SDK 并生成一个单跨度追踪。

代码语言:javascript
复制
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(OTLPSpanExporter())
)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("foo"):
    print("Hello world!")

basic_trace.py

代码语言:javascript
复制
opentelemetry-api
opentelemetry-sdk
opentelemetry-exporter-otlp-proto-http

requirements.txt

按如下方式运行该程序:

代码语言:javascript
复制
pip install -r requirements.txt
OTEL_SERVICE_NAME=primer python3 basic_trace.py

如果我们现在刷新 Jaeger UI 中的搜索屏幕,服务下拉列表应该包含服务 primer(请注意,我们通过环境变量将此服务名称传递给 SDK),来自此服务的追踪应该如下所示:

通过 OTLP 提交的样本追踪。

OTLP 接收器可以通过以--collector.otlp.*开头的多个标志进一步定制,这些标志可以通过收集器和 all-in-one 二进制文件中的 help 命令获得。这些标志允许更改两个 OTLP 服务器的端口号,配置 TLS,以及更改一些其他参数,如最大消息大小和保持活动状态。

限制

现有的实现有一些注意事项:

  • 如果你的应用程序使用 OTLP 导出追踪和指标,那么你仍然需要运行 OpenTelemetry 收集器,因为 Jaeger 收集器只能接受 OTLP 数据的追踪部分。或者,你可以用指向不同后端的两个 OTLP 导出器来配置 SDK。
  • Jaeger 后端并不支持 OpenTelemetry 收集器中 OTLP 接收器支持的所有选项。
  • 只有 Jaeger 收集器支持新的 OTLP 接收器。Jaeger 代理仅支持“经典”Jaeger 格式。如果你的部署需要本地代理,我们建议运行 OpenTelemetry 收集器。

参考资料

[1]

Jaeger v1.35 版本: https://github.com/jaegertracing/jaeger/releases/tag/v1.35.0

[2]

OpenTelemetry 协议(OTLP): https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md

[3]

宣布淘汰 Jaeger“经典”客户端库: https://twitter.com/YuriShkuro/status/1455170693197402119

[4]

入门文档: https://www.jaegertracing.io/docs/latest/getting-started/

[5]

聊天室: https://www.jaegertracing.io/get-in-touch/


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。

CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Primer
  • 限制
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档