Jaeger引入了对OpenTelemetry的原生支持

2022-06-10 14:27:41 浏览数 (1)

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

0 人点赞