62. 将 Span 发送到 Zipkin

默认情况下,如果将spring-cloud-starter-zipkin作为依赖项添加到项目,则关闭 Span 后,Span 将通过 HTTP 发送到 Zipkin。通信是异步的。您可以通过设置spring.zipkin.baseUrl属性来配置 URL,如下所示:

spring.zipkin.baseUrl: http://192.168.99.100:9411/

如果要通过服务发现找到 Zipkin,可以在 URL 内传递 Zipkin 的服务 ID,如以下zipkinserver服务 ID 的示例所示:

spring.zipkin.baseUrl: http://zipkinserver/

要禁用此功能,只需将spring.zipkin.discoveryClientEnabled设置为 false。

启用发现 Client 端功能后,Sleuth 使用LoadBalancerClient查找 Zipkin 服务器的 URL。这意味着您可以设置负载平衡配置,例如通过功能区。

zipkinserver:
  ribbon:
    ListOfServers: host1,host2

如果您在 Classpath 中同时使用了 web,rabbit 或 kafka,则可能需要选择将 Span 发送到 zipkin 的方法。为此,请将webrabbitkafka设置为spring.zipkin.sender.type属性。以下示例显示了为web设置发送者类型:

spring.zipkin.sender.type: web

要自定义通过 HTTP 将 Span 发送到 Zipkin 的RestTemplate,可以注册ZipkinRestTemplateCustomizer bean。

@Configuration
class MyConfig {
	@Bean ZipkinRestTemplateCustomizer myCustomizer() {
		return new ZipkinRestTemplateCustomizer() {
			@Override
			void customize(RestTemplate restTemplate) {
				// customize the RestTemplate
			}
		};
	}
}

但是,如果您想控制创建RestTemplate对象的整个过程,则必须创建zipkin2.reporter.Sender类型的 Bean。

@Bean Sender myRestTemplateSender(ZipkinProperties zipkin,
			ZipkinRestTemplateCustomizer zipkinRestTemplateCustomizer) {
		RestTemplate restTemplate = mySuperCustomRestTemplate();
		zipkinRestTemplateCustomizer.customize(restTemplate);
		return myCustomSender(zipkin, restTemplate);
	}