如何配置OpenTelemetry仅追踪服务间调用 实现Sleuth式链路效果
OpenTelemetry 对齐Spring Cloud Sleuth采集效果配置方案
核心问题修正
之前的配置存在两个核心问题,直接导致冗余采集过多、Metrics导出报错:
- 插桩开关格式错误:配置
otel.instrumentation.xxx.enabled时,组件名不需要加方括号,方括号是官方文档里的占位符标识,带括号的配置不会被OTel识别,这也是之前关不掉方法调用、JDBC采集的根本原因。 - 未显式关闭非链路信号导出:OTel默认会同时导出Traces(链路)、Metrics(指标)、Logs(日志)三类数据,仅配置链路导出到Zipkin时,指标默认走OTLP协议往本地4317端口发送,就会出现连接失败的报错。
具体配置步骤
1. 关闭多余信号导出,解决连接报错
直接显式指定不需要导出指标和日志,从根源上解决4317端口连接错误:
-Dotel.metrics.exporter=none -Dotel.logs.exporter=none -Dotel.traces.exporter=zipkin
2. 仅保留跨服务调用相关埋点,对齐Sleuth采集范围
Sleuth默认只采集服务入口、跨服务调用两类Span,配置时仅保留两类必要插桩即可,其余全部关闭:
- 服务入口插桩:比如使用的Jax-RS、Servlet/Spring Web入口
- 跨服务调用客户端插桩:比如Jax-RS Client、RestTemplate、Feign、OkHttp等HTTP/RPC客户端
常见需要关闭的冗余插桩配置如下:
# 关闭方法级埋点 -Dotel.instrumentation.methods.enabled=false # 关闭数据库相关埋点 -Dotel.instrumentation.jdbc.enabled=false -Dotel.instrumentation.jdbc-datasource.enabled=false -Dotel.instrumentation.mybatis.enabled=false -Dotel.instrumentation.jpa.enabled=false # 关闭日志框架埋点 -Dotel.instrumentation.logback-appender.enabled=false -Dotel.instrumentation.log4j-appender.enabled=false # 关闭运行时指标、Micrometer埋点 -Dotel.instrumentation.runtime-metrics.enabled=false -Dotel.instrumentation.micrometer.enabled=false # 关闭静态资源、框架内部视图Span -Dotel.instrumentation.common.experimental.suppress-mvc-view-span=true -Dotel.instrumentation.spring-webmvc.static-resources.enabled=false
如果业务不需要追踪Redis、消息队列等中间件链路,也可以追加对应插桩的关闭配置,例如-Dotel.instrumentation.lettuce.enabled=false、-Dotel.instrumentation.kafka.enabled=false。
3. 对齐Sleuth的链路透传规则
Spring Cloud Sleuth默认使用B3协议透传TraceId,为了保证跨服务调用时TraceId能正常关联,需要配置OTel的传播器兼容B3格式:
-Dotel.propagators=tracecontext,baggage,b3
采样规则保持默认全采样即可,和Sleuth默认行为一致:-Dotel.traces.sampler=always_on。
兜底优化
如果配置完成后仍有零星本地冗余Span,可以在代码中添加Span导出过滤器,仅保留入口Span、跨服务客户端Span,过滤所有本地生成的内部Span,即可完全对齐Sleuth的采集输出效果。
内容的提问来源于stack exchange,提问作者Metalhead
相关产品推荐
相关产品推荐

