Zipkin

这个示例演示了 Dubbo 集成 Zipkin 全链路追踪的基础示例

这个示例演示了 Dubbo 集成 Zipkin 全链路追踪的基础示例,完整代码请参考 dubbo-samples-tracing-zipkin,此示例共包含三部分内容:

  • dubbo-samples-spring-boot3-tracing-provider
  • dubbo-samples-spring-boot3-tracing-consumer
  • dubbo-samples-spring-boot3-tracing-interface

快速开始

安装 & 启动 Zipkin

参考 Zipkin’s quick start 安装 Zipkin。

这里我们使用 Docker 来演示如何快速的启动 Zipkin 服务。

  1. docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin

紧接着,你可以通过如下链接确认 Zipkin 正常工作 [http://localhost:9411](http://localhost:9411)

zipkin_home

安装 & 启动 Nacos

跟随 Nacos’s quick start 快速安装并启动 Nacos。

启动示例 Provider

在 IDE 中直接运行 org.apache.dubbo.springboot.demo.provider.ProviderApplication

启动示例 Consumer

在 IDE 中直接运行 org.apache.dubbo.springboot.demo.consumer.ConsumerApplication

检查监控效果

在浏览器中打开 http://localhost:9411/zipkin/ 查看效果。

zipkin.png

如何在SpringBoot项目中使用 Dubbo Tracing

1. 添加 Dubbo Tracing 相关的 Starter 依赖

从下面两个 starter 中选择一个加入到你的项目中,区别在于 Tracer 的选型不一样,一个是 Opentelemetry,一个是 Brave:

  1. <!-- Opentelemetry as Tracer, Zipkin as exporter -->
  2. <dependency>
  3. <groupId>org.apache.dubbo</groupId>
  4. <artifactId>dubbo-spring-boot-tracing-otel-zipkin-starter</artifactId>
  5. </dependency>
  1. <!-- Brave as Tracer, Zipkin as exporter -->
  2. <dependency>
  3. <groupId>org.apache.dubbo</groupId>
  4. <artifactId>dubbo-spring-boot-tracing-brave-zipkin-starter</artifactId>
  5. </dependency>

2. 配置

在application.yml中添加如下配置:

  1. dubbo:
  2. tracing:
  3. enabled: true # 默认为false
  4. sampling:
  5. probability: 0.5 # 采样率, 默认是 0.1
  6. propagation:
  7. type: W3C # 传播器类型:W3C/B3 默认是W3C
  8. tracing-exporter:
  9. zipkin-config:
  10. endpoint: http://localhost:9411/api/v2/spans
  11. connect-timeout: 1s # 建立连接超时时间, 默认为1s
  12. read-timeout: 10s # 传递数据超时时间, 默认为10s
  13. # tracing信息输出到logging
  14. logging:
  15. pattern:
  16. level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'

扩展

选择合适的Sender

Zipkin 的 Sender,是 Exporter 将埋点后的数据进行上报的客户端实现,全部实现可参考

Sender 有很多种实现:

  • URLConnectionSender 通过 Java 自带的 HTTP 客户端上报
  • OkHttpSender 通过 OKHttp3 上报
  • KafkaSender 通过 Kafka 消息队列上报
  • ActiveMQSender 通过 ActiveMQ 消息队列上报
  • RabbitMQSender 通过 RabbitMQ 消息队列上报

Dubbo Tracing 相关的 starter 目前默认是使用 OKHttpSender,也支持 URLConnectionSender,如果想通过 URLConnectionSender 向 Zipkin 发送 Spans,可直接在 pom 中添加如下依赖:

  1. <dependency>
  2. <groupId>io.zipkin.reporter2</groupId>
  3. <artifactId>zipkin-sender-urlconnection</artifactId>
  4. </dependency>

配置 Zipkin 的 endpoint、connectTimeout、readTimeout

  1. dubbo:
  2. tracing:
  3. enabled: true # 默认为false
  4. tracing-exporter:
  5. zipkin-config:
  6. endpoint: http://localhost:9411/api/v2/spans
  7. connect-timeout: 1s # 建立连接超时时间, 默认为1s
  8. read-timeout: 10s # 传递数据超时时间, 默认为10s

如果想使用其他类型的 Sender ,需要用户在项目中手动注入对应的 Bean,并配置对应的属性,如 KafkaSender:

  1. @Configuration
  2. public class KafkaSenderConfiguration {
  3. @Bean
  4. KafkaSender kafkaSender(){
  5. KafkaSender.Builder builder = KafkaSender.newBuilder();
  6. builder.bootstrapServers("127.0.0.0.1:9092");
  7. builder.topic("zipkin");
  8. builder.encoding(Encoding.JSON);
  9. return builder.build();
  10. }
  11. }

SpringBoot2案例

dubbo-tracing相关的使用在SpringBoot2与3中区别不大,SpringBoot2的案例可参考代码地址

非SpringBoot项目案例

对于非SpringBoot项目,也可以使用 Dubbo Bootstrap 的 api 方式使用 tracing,详细案例可参考代码地址

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)