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

How to add information to every span with Spring Cloud Sleuth

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

到目前为止我尝试过的:

使用我自己的 GenericFilterBeanHandlerInterceptorAdapter 实现,在构造函数中给它们一个 Tracer 并在每次使用 tracer.addTag("key", "value") [=16= 调用它们时编写标签]

我查看了新行李信息的想法——但是我以一种对整个跟踪都是全局的方式来解释它——并且由于跟踪有多个跨不同 services/machines 的请求,它会不符合我在 service/machine 级别添加信息的目的。

到目前为止,当我检查通过 spring-cloud-stream-binder-kafka[=16= 写入我的 kafka 主题的 JSON 时,过滤器和拦截器的标签已为某些跨度设置,但不是全部]

所以我的问题是:确实存在哪些类型的 requests/actions 可以创建跨度,以及将某些内容注入这些跨度的适当方法是什么。因为我想将此实现部署到多个微服务,所以我不想对每个方法进行注释或做类似的工作密集型操作,因此无法扩展方法。

这样的地方还有很多……其实,我们可以换个角度来解决问题。只有一个地方可以挂钩 - 当 span 关闭时。 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 reporter 之前将添加一个标签。更简单的方法是在报告之前注册调整跨度的 SpanAdjuster bean。这样你就可以只在一个地方添加标签。