This example demonstrates a basic example of Dubbo integrating Zipkin for end-to-end tracing. For the complete code, please refer to dubbo-samples-tracing-zipkin, which consists of three parts:
Refer to Zipkin’s quick start to install Zipkin.
Here we use Docker to demonstrate how to quickly start the Zipkin service.
docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin
Next, you can confirm that Zipkin is working properly through the following link: [http://localhost:9411](http://localhost:9411)
Follow Nacos’s quick start to quickly install and launch Nacos.
Run org.apache.dubbo.springboot.demo.provider.ProviderApplication
directly in the IDE.
Run org.apache.dubbo.springboot.demo.consumer.ConsumerApplication
directly in the IDE.
Open http://localhost:9411/zipkin/
in your browser to see the effects.
Choose one from the two starters below to add to your project, with differences in the choice of Tracer, one is Opentelemetry, and the other is 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>
Add the following configuration in application.yml:
dubbo:
tracing:
enabled: true # Default is false
sampling:
probability: 0.5 # Sampling rate, default is 0.1
propagation:
type: W3C # Propagator type: W3C/B3, default is W3C
tracing-exporter:
zipkin-config:
endpoint: http://localhost:9411/api/v2/spans
connect-timeout: 1s # Connection timeout, default is 1s
read-timeout: 10s # Data transmission timeout, default is 10s
# Output tracing information to logging
logging:
pattern:
level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
The Sender in Zipkin is a client implementation for the Exporter to report the traced data, all implementations can be referenced here.
There are many implementations of Sender:
Currently, the default starter for Dubbo Tracing uses OKHttpSender and also supports URLConnectionSender. If you want to send Spans to Zipkin via URLConnectionSender, you can directly add the following dependency in your pom:
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-urlconnection</artifactId>
</dependency>
Configure Zipkin’s endpoint, connectTimeout, readTimeout.
dubbo:
tracing:
enabled: true # Default is false
tracing-exporter:
zipkin-config:
endpoint: http://localhost:9411/api/v2/spans
connect-timeout: 1s # Connection timeout, default is 1s
read-timeout: 10s # Data transmission timeout, default is 10s
If you want to use other types of Sender, you will need to manually inject the corresponding Bean in your project and configure the corresponding properties, such as 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();
}
}
The usage of dubbo-tracing remains largely the same between SpringBoot2 and 3, the example for SpringBoot2 can be referenced at code address.
For non-SpringBoot projects, tracing can also be used through the Dubbo Bootstrap API method, detailed examples can be referenced at code address