Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持, 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是一篇关于如何使用此出色的库添加对分布式跟踪支持的简要说明。
考虑两个应用程序–一个使用上游服务应用程序的客户端应用程序,都使用Spring WebFlux ( Spring的反应式Web堆栈):
我的目标是确保可以跟踪从用户到客户端应用程序再到服务应用程序的流,并清晰记录请求的延迟。
Spring Cloud Sleuth启用的最终拓扑如下:
来自客户端和服务应用程序的采样跟踪信息通过RabbitMQ之类的排队机制导出到Zipkin。
那么,对客户端和服务应用程序需要进行哪些更改–就像我说的那样,非常简单! 需要引入以下库–在我的情况下是通过gradle引入的:
compile("org.springframework.cloud:spring-cloud-starter-sleuth")compile("org.springframework.cloud:spring-cloud-starter-zipkin")compile("org.springframework.amqp:spring-rabbit")
未指定版本,因为期望通过Spring Cloud BOM引入这些版本,这要归功于Spring Gradle Dependency Management插件 :
ext {springCloudVersion = 'Finchley.RELEASE'
}apply plugin: 'io.spring.dependency-management'dependencyManagement {imports {mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"}
}
就是这样,应用程序中的所有日志现在都应该开始记录跟踪和跨度,请参阅以下跨两个不同服务的日志中的traceid记录:
2018-06-22 04:06:28.579 INFO [sample-client-app,c3d507df405b8aaf,c3d507df405b8aaf,true] 9 --- [server-epoll-13] sample.load.PassThroughHandler : handling message: Message(id=null, payload=Test, delay=1000)
2018-06-22 04:06:28.586 INFO [sample-service-app,c3d507df405b8aaf,829fde759da15e63,true] 8 --- [server-epoll-11] sample.load.MessageHandler : Handling message: Message(id=5e7ba240-f97d-405a-9633-5540bbfe0df1, payload=Test, delay=1000)
此外,Zipkin UI还记录了导出的信息,并可以通过以下方式直观地显示示例跟踪:
该示例可在我的github存储库中找到 – https://github.com/bijukunjummen/sleuth-webflux-sample,可以使用docker-compose轻松启动,并插入所有依赖项。
翻译自: https://www.javacodegeeks.com/2018/06/reactive-flow-spring-cloud-sleuth.html