55. Sending spans to Zipkin
spring-cloud-sleuth-stream
is deprecated and should no longer be used. Ifspring-cloud-sleuth-zipkin
is on the classpath then the app will generate and collect Zipkin-compatible traces. By default it sends them via HTTP to a Zipkin server on localhost (port 9411). If you depend onspring-rabbit
orspring-kafka
your app will send traces to a broker instead of http.
By default if you add spring-cloud-starter-zipkin
as a dependency to your project, when the span is closed, it will be sent to Zipkin over HTTP. The communication is asynchronous. You can configure the URL by setting the spring.zipkin.baseUrl
property as follows:
spring.zipkin.baseUrl: http://192.168.99.100:9411/
If you want to find Zipkin via service discovery it’s enough to pass the Zipkin’s service id inside the URL. If you want to disable this feature just set spring.zipkin.discoveryClientEnabled
to false. Example for
zipkinserver` service id:
spring.zipkin.baseUrl: http://zipkinserver/
When this Discovery Client feature is enabled, Sleuth uses LoadBalancerClient
to find the URL of the Zipkin Server. It means that you can set up the load balancing configuration e.g. via Ribbon.
zipkinserver:
ribbon:
ListOfServers: host1,host2
If you have web, rabbit or kafka together on the classpath, you might need to pick the means by which you would like to send spans to zipkin. To do that just set either web
, rabbit
or kafka
to the spring.zipkin.sender.type
property. Example for web
:
spring.zipkin.sender.type: web
To customize the RestTemplate
that sends spans to Zipkin via HTTP, you can register the ZipkinRestTemplateCustomizer
bean.
@Configuration
class MyConfig {
@Bean ZipkinRestTemplateCustomizer myCustomizer() {
return new ZipkinRestTemplateCustomizer() {
@Override
void customize(RestTemplate restTemplate) {
// customize the RestTemplate
}
};
}
}
If, however, you would like to control the full process of creating the RestTemplate
object, you will have to create a bean of zipkin2.reporter.Sender
type.
@Bean Sender myRestTemplateSender(ZipkinProperties zipkin,
ZipkinRestTemplateCustomizer zipkinRestTemplateCustomizer) {
RestTemplate restTemplate = mySuperCustomRestTemplate();
zipkinRestTemplateCustomizer.customize(restTemplate);
return myCustomSender(zipkin, restTemplate);
}