Skip to main content

MicroMeter Tracing 服务链路追踪

MicroMeter Tracing 是度量监控框架,它可以用于监控应用的性能指标。在 Spring Cloud 中,我们可以使用 MicroMeter Tracing 来监控服务的性能指标,比如请求的响应时间、请求的成功率等。并查看整个微服务系统的链路,方便排查问题。

MicroMeter Tracing 收集的数据可以通过 ZipKin 来可视化展示。

启动 ZipKin

向 compose 文件添加,

  zipkin:
image: openzipkin/zipkin
ports:
- 9411:9411

只转发 9411 端口即可,然后启动 docker,访问 9411 端口即可。

ZipKin 首页

配置 MicroMeter Tracing

根据官方文档,首先要引入依赖,

implementation platform('io.micrometer:micrometer-tracing-bom:latest.release')

platform 的功能和 dependencyManagement 类似,可以统一管理依赖的版本。

implementation 'io.micrometer:micrometer-tracing'

注意,Micrometer 本身是只是一个追踪框架,需要配合具体的实现来使用,比如 Brave,作为分布式追踪的实现,以及 Observer,作为性能监控的实现。

implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'io.micrometer:micrometer-observation'

然后需要一个 Reporter,把数据发送到 ZipKin,

implementation 'io.zipkin.reporter2:zipkin-reporter-brave'

如果是用的 Spring Interface Client,默认有一个 WebClient 的追踪器,参见文档。如果使用 OpenFeign,还要引入 OpenFeign 的追踪器,

implementation 'io.github.openfeign:feign-micrometer:13.3'

这些应该引入到需要追踪的服务中。这里我们希望追踪所有服务,所以在 allprojects 中引入。

如果使用默认的 WebClient Builder,即不自定义 WebClient Builder,那么就不需要额外配置,因为默认的 WebClient Builder 已经集成了追踪器。

但是,因为我们之前更改了 WebClient Builder,所以需要手动添加追踪器,参考文档

如果用 OpenFeign,不用做这一步。

@Bean
@LoadBalanced
WebClient.Builder webClientBuilder(
@Autowired ObservationWebClientCustomizer observationWebClientCustomizer
) {
HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom();
clientBuilder.setDefaultRequestConfig(RequestConfig.custom().build());
CloseableHttpAsyncClient client = clientBuilder.build();
ClientHttpConnector connector = new HttpComponentsClientHttpConnector(client);
WebClient.Builder builder = WebClient.builder();
observationWebClientCustomizer.customize(builder);
return builder.clientConnector(connector);
}

然后修改需要追踪的服务的配置,

management:
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans
tracing:
sampling:
probability: 1.0

这样,就可以在 ZipKin 中看到服务的链路了。启动两个服务后,可以看到健康检查的信息,

ZipKin 查询

再任意发送一个请求,可以看到新的链路信息,

ZipKin 链路信息

点击 Show 可以看到详细的链路信息,

ZipKin 详细链路信息

使用上方的依赖,可以查看服务间的调用链路,拓扑关系等等。

ZipKin 依赖