Apache Dubbo 分布式追踪实战:3 行配置接通 OpenTelemetry 全链路
Apache Dubbo 分布式追踪实战3 行配置接通 OpenTelemetry 全链路【免费下载链接】dubboThe java implementation of Apache Dubbo. An RPC and microservice framework.项目地址: https://gitcode.com/gh_mirrors/dubbo11/dubboApache Dubbo 基于 Micrometer Observation 与 OpenTelemetry 提供了开箱即用的分布式追踪能力一次 RPC 调用可以生成贯穿上下游服务的 Trace并在 Zipkin 等后端中查看完整调用链。本文只覆盖四件事依赖装什么、怎么开启与配置导出、Trace 上下文如何跨服务传递、以及没有数据时按什么顺序排查。先装什么Dubbo 自带的 tracing starter这节解决依赖怎么选的问题。Dubbo 把追踪集成做成了独立的 Spring Boot starter按后端选型引入对应 artifact 即可无需自己拼 OpenTelemetry SDK。以 Zipkin 为例引入 observability 目录下的 starterdependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-tracing-otel-zipkin-starter/artifactId /dependency该 starter 会带上micrometer-tracing-bridge-otel与opentelemetry-exporter-zipkin自动装配代码集中在 observability/autoconfigure 模块。如果后端不是 Zipkin 而是 OTLP Collector同目录下还有dubbo-spring-boot-tracing-otel-otlp-starter可选。三步开启一行开关加两行参数这节解决怎么开的问题。追踪总开关是dubbo.tracing.enabled默认关闭必须显式置为true。其余参数都挂在dubbo.tracing前缀下定义见 TracingConfig。dubbo.tracing.enabledtrue # 采样率默认 0.1开发环境建议 1.0 保证链路完整 dubbo.tracing.sampling.probability1.0 # Zipkin 上报地址 dubbo.tracing.tracing-exporter.zipkin-config.endpointhttp://localhost:9411采样率的取值要分场景开发环境设为1.0任何请求都能查到完整链路生产环境按 10%默认值左右的量级控制上报压力配合批处理导出即可兼顾性能。多应用按应用名覆盖配置同一进程暴露多个 Dubbo 应用时可以用dubbo.tracings.应用名前缀分别控制开关和采样率dubbo.tracings.provider.enabledtrue dubbo.tracings.provider.sampling.probability0.5 dubbo.tracings.consumer.enabledtrue dubbo.tracings.consumer.sampling.probability1.0换成 OTLP 导出接 OTLP Collector 时把导出参数换成otlp-config前缀支持超时、压缩与自定义 headerdubbo.tracing.tracing-exporter.otlp-config.endpointhttp://localhost:4317/v1/traces dubbo.tracing.tracing-exporter.otlp-config.compression-methodgzip上下文怎么跨服务传播协议与 SPI这节解决Trace ID 如何在上下游之间传的问题。默认情况下 Dubbo 通过 W3C Trace Context 协议把传播上下文写入 RPC attachment下游服务据此延续同一条 Trace想改协议类型可以配置dubbo.tracing.propagation.typeB3。若还要透传业务字段可通过dubbo.tracing.baggage.remote-fields声明允许跨进程携带的 Baggage 键并在dubbo.tracing.baggage.correlation.fields中列出需要打印到日志的字段方便按 traceId 检索日志。除 HTTP 风格的传播头外Dubbo 还在网格路由侧留了一个 SPITracingContextProvider。它的方法签名只有一个String getValue(Invocation invocation, String key);作用是从第三方追踪工具如 OpenTelemetry 上下文中按键取值供路由规则按追踪上下文匹配请求。需要自定义时实现该接口并在META-INF/dubbo下创建与接口全限定名同名的文件customcom.example.MyTracingContextProvider怎么确认链路已接通从 JMX 到追踪 UI这节解决配完了怎么验证。先看进程侧Dubbo 的健康与观测信息可以经 JMX 端点查询dubbo-spring-boot-actuator 模块还把这些指标暴露成 Spring Boot Actuator 端点。再发起一次跨服务调用然后打开 Zipkin UI默认 http://localhost:9411能搜到同一条 Trace 下包含 provider 和 consumer 两侧 span说明传播与导出都正常如果只看到单侧 span问题多半出在另一侧的依赖或传播配置上。没有数据时按这个顺序排查这节解决配了却看不到链路的问题按命中概率从高到低依次确认dubbo.tracing.enabled忘了开该开关默认false不置为true时整个追踪装配不生效这是最常见的情况。starter 与后端不匹配用 OTLP starter 却只配了 Zipkin endpoint或反之对应 exporter 不会被创建span 无处上报。采样率过低默认0.1意味着九成请求不上报偶发查不到链路时先把开发环境调成1.0复测。endpoint 不通确认应用能访问9411等端口注意网关与网络策略Dubbo 对 Zipkin 的默认连接超时只有 1 秒超时偏紧的环境可调大zipkin-config.connect-timeout。上下游版本不一致所有参与调用的服务都需要引入同样的追踪依赖并启用开关只有一侧升级时链路会断在该侧。换了传播协议后下游不识别dubbo.tracing.propagation.type改成 B3 后未支持 B3 的下游无法接续 Trace跨团队系统建议保持默认 W3C。下一步可以深入 observability 自动装配源码理解 sampler、propagator 与 exporter 各 Bean 的装配条件若需要把追踪与指标、日志统一出口可继续看 dubbo-spring-boot-actuator 模块的端点实现。【免费下载链接】dubboThe java implementation of Apache Dubbo. An RPC and microservice framework.项目地址: https://gitcode.com/gh_mirrors/dubbo11/dubbo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考