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

标签 java spring spring-cloud-sleuth

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

到目前为止我尝试了什么:

使用我自己的 GenericFilterBean 实现和 HandlerInterceptorAdapter , 给他们一个 Tracer在构造函数中并在每次使用 tracer.addTag("key", "value") 调用它们时写入标签

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

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

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

最佳答案

这样的地方还有很多……其实,我们可以换个角度来解决这个问题。只有一个地方可以 Hook - 当 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 实现,在委托(delegate)给例如 Zipkin span reporter 之前将添加一个标签。更简单的方法是只注册 SpanAdjuster bean,它会在报告范围之前调整范围。这样你就可以只在一个地方添加标签。

关于java - 如何使用 Spring Cloud Sleuth 向每个跨度添加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45031029/

相关文章:

java - 如何在 Kepler IDE 中创建 MVC 项目

Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成

spring - 在 Spring Cloud 中重命名 x-b3-traceid header

java - 关闭浏览器时 session 丢失

java - 使 jfilechooser 显示图像缩略图

java - 将文件读入 Derby 数据库

java - Java中重写接口(interface)方法

java - 具有 util :property-path as annotation 的 Spring 属性

java - 在 Quartz 中使用批处理模式

scheduled-tasks - 当 Sleuth 在场时,ShedLock 不会锁定