13. 将 Span 发送到 Zipkin

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

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

如果要通过服务发现查找 Zipkin,可以在 URL 中传递 Zipkin 的服务 ID,如以下示例中的服务 ID 所示:zipkinserverspring-doc.cn

spring.zipkin.baseUrl: https://zipkinserver/

默认情况下,api 路径将设置为或取决于编码器版本。如果要使用自定义 api 路径,可以使用以下属性(空大小写,设置 “”)进行配置:api/v2/spansapi/v1/spansspring-doc.cn

spring.zipkin.apiPath: v2/path2

要禁用此功能,只需设置为 'false.spring.zipkin.discoveryClientEnabledspring-doc.cn

启用 Discovery Client 功能后,Sleuth 用于查找 Zipkin 服务器的 URL。这意味着 ,您可以设置负载平衡配置,例如通过 Ribbon。LoadBalancerClientspring-doc.cn

zipkinserver:
  ribbon:
    ListOfServers: host1,host2

如果您在 Classpath 上同时拥有 web、rabbit、activemq 或 kafka,则可能需要选择要将 span 发送到 zipkin 的方法。 为此,请将 、 或 设置为 属性。 以下示例显示了设置发件人类型 :webrabbitactivemqkafkaspring.zipkin.sender.typewebspring-doc.cn

spring.zipkin.sender.type: web

要自定义通过 HTTP 向 Zipkin 发送 span 的 span,您可以注册 豆子。RestTemplateZipkinRestTemplateCustomizerspring-doc.cn

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

但是,如果要控制创建对象的整个过程,则必须创建一个 type 为 的 bean。RestTemplatezipkin2.reporter.Senderspring-doc.cn

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