如何使用Spring Cloud Sleuth向每个跨度添加信息

时间:2017-07-11 09:47:58

标签: java spring spring-cloud-sleuth

我目前正在尝试了解如何以可扩展的方式自定义Spring Cloud Sleuth以向每个Span添加信息。

到目前为止我尝试过:

使用我自己的GenericFilterBeanHandlerInterceptorAdapter实现,在构造函数中为它们指定Tracer,并在每次使用tracer.addTag("key", "value")

调用它们时编写标记

我看了一下新行李信息的概念 - 但是我以一种全局跟踪的方式解释它 - 并且由于跟踪在不同的服务/机器上有多个请求,它不符合我的目的添加服务/机器级别的信息。

到目前为止,当我通过spring-cloud-stream-binder-kafka

检查写入我的kafka主题的JSON时,来自Filter和Interceptor的标签被设置为某些Spans但不是全部。

所以我的问题是:确实存在哪些类型的请求/操作可以创建跨度,以及将某些内容注入这些跨度的适当方法。由于我想将此实现部署到多个微服务,因此我不想对每个方法进行注释,也不需要进行类似的工作密集,因此不能进行可扩展的方法。

1 个答案:

答案 0 :(得分:2)

有很多这样的地方......但实际上,我们可以从另一个角度解决问题。有一个地方可以挂钩 - 当跨度关闭时。 https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanReporter.java - 您可以创建自己的SpanReporter实现,然后在委托Zipkin span报告者添加标记之前。更简单的方法是在报告之前注册调整跨度的SpanAdjuster bean。这样,您只能在一个地方添加标签。