
前言
在微服务架构盛行的今天,分布式系统的复杂性让性能监控与问题排查变得极具挑战。开发者需要一套高效的工具链,既能收集全链路追踪数据,又能通过直观的界面快速定位瓶颈。OpenTelemetry作为云原生领域观测数据的统一标准,与Jaeger这一开源的分布式追踪系统强强联合,成为构建可观测性体系的黄金组合。本文将手把手教你如何配置OpenTelemetry,将追踪数据无缝导出至Jaeger,助你轻松实现系统透明化。
OpenTelemetry(简称OTel)是一套跨语言的观测框架,通过标准化的API和SDK,统一了日志、指标和追踪数据的采集方式。而Jaeger作为CNCF毕业项目,专注于分布式追踪,支持可视化的调用链分析与性能诊断。两者的结合,能够帮助开发者:
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
启动后,访问http://localhost:16686即可进入Jaeger UI。
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.30.1</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-jaeger</artifactId>
<version>1.30.1</version>
</dependency>
OpenTelemetry支持两种方式向Jaeger发送数据:直接通过gRPC协议传输或通过OpenTelemetry Collector中转。
JaegerGrpcSpanExporter:
JaegerGrpcSpanExporter exporter = JaegerGrpcSpanExporter.builder()
.setEndpoint("http://localhost:14250") // Jaeger的gRPC接收端口
.setTimeout(30, TimeUnit.SECONDS)
.build();
SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(exporter).build())
.build();
OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder()
.setTracerProvider(tracerProvider)
.buildAndRegisterGlobal();
注:Jaeger默认的gRPC端口为14250,需确保应用与Jaeger的网络连通性。
config.yaml:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
exporters:
jaeger:
endpoint: "jaeger:14250"
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [jaeger]
OtlpGrpcSpanExporter exporter = OtlpGrpcSpanExporter.builder()
.setEndpoint("http://localhost:4317")
.build();
为优化数据导出性能与可靠性,需关注以下核心参数:
setEndpoint():Jaeger的gRPC或HTTP端点地址;
setTimeout():导出超时时间,防止网络波动导致线程阻塞;
BatchSpanProcessor配置:
setMaxExportBatchSize:单次批量发送的Span数量(默认512);
setScheduleDelay:批量处理间隔时间(默认5秒);
setSampler():采样策略(如ParentBasedSampler避免过度采集)。
http://而非grpc://);
BatchSpanProcessor的setScheduleDelay至更低值(如1秒);
setMaxQueueSize(默认2048),避免因队列满导致数据丢失。
SimpleSpanProcessor替代批处理(适用于低吞吐场景)。
通过以上步骤,开发者能够快速搭建OpenTelemetry与Jaeger的集成环境。需注意的是,生产环境中建议结合OpenTelemetry Collector实现数据路由与缓冲,同时配置持久化存储(如Elasticsearch)保障数据可靠性。让观测数据真正成为优化系统性能的指南针,而非淹没团队的噪声源。
Air
March 7, 2025
产品资讯