这个示例演示了 Dubbo 集成 Zipkin 全链路追踪的基础示例,完整代码请参考 dubbo-samples-tracing-zipkin,此示例共包含三部分内容:
参考 Zipkin’s quick start 安装 Zipkin。
这里我们使用 Docker 来演示如何快速的启动 Zipkin 服务。
docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin
紧接着,你可以通过如下链接确认 Zipkin 正常工作 [http://localhost:9411](http://localhost:9411)
跟随 Nacos’s quick start 快速安装并启动 Nacos。
在 IDE 中直接运行 org.apache.dubbo.springboot.demo.provider.ProviderApplication
。
在 IDE 中直接运行 org.apache.dubbo.springboot.demo.consumer.ConsumerApplication
。
在浏览器中打开 http://localhost:9411/zipkin/
查看效果。
从下面两个 starter 中选择一个加入到你的项目中,区别在于 Tracer 的选型不一样,一个是 Opentelemetry,一个是 Brave:
<!-- Opentelemetry as Tracer, Zipkin as exporter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-tracing-otel-zipkin-starter</artifactId>
</dependency>
<!-- Brave as Tracer, Zipkin as exporter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-tracing-brave-zipkin-starter</artifactId>
</dependency>
在application.yml中添加如下配置:
dubbo:
tracing:
enabled: true # 默认为false
sampling:
probability: 0.5 # 采样率, 默认是 0.1
propagation:
type: W3C # 传播器类型:W3C/B3 默认是W3C
tracing-exporter:
zipkin-config:
endpoint: http://localhost:9411/api/v2/spans
connect-timeout: 1s # 建立连接超时时间, 默认为1s
read-timeout: 10s # 传递数据超时时间, 默认为10s
# tracing信息输出到logging
logging:
pattern:
level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
Zipkin 的 Sender,是 Exporter 将埋点后的数据进行上报的客户端实现,全部实现可参考
Sender 有很多种实现:
Dubbo Tracing 相关的 starter 目前默认是使用 OKHttpSender,也支持 URLConnectionSender,如果想通过 URLConnectionSender 向 Zipkin 发送 Spans,可直接在 pom 中添加如下依赖:
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-urlconnection</artifactId>
</dependency>
配置 Zipkin 的 endpoint、connectTimeout、readTimeout
dubbo:
tracing:
enabled: true # 默认为false
tracing-exporter:
zipkin-config:
endpoint: http://localhost:9411/api/v2/spans
connect-timeout: 1s # 建立连接超时时间, 默认为1s
read-timeout: 10s # 传递数据超时时间, 默认为10s
如果想使用其他类型的 Sender ,需要用户在项目中手动注入对应的 Bean,并配置对应的属性,如 KafkaSender:
@Configuration
public class KafkaSenderConfiguration {
@Bean
KafkaSender kafkaSender(){
KafkaSender.Builder builder = KafkaSender.newBuilder();
builder.bootstrapServers("127.0.0.0.1:9092");
builder.topic("zipkin");
builder.encoding(Encoding.JSON);
return builder.build();
}
}
dubbo-tracing相关的使用在SpringBoot2与3中区别不大,SpringBoot2的案例可参考代码地址。
对于非SpringBoot项目,也可以使用 Dubbo Bootstrap 的 api 方式使用 tracing,详细案例可参考代码地址