java如何使用Spring Cloud Sleuth为每个跨度添加信息
我目前正在尝试了解如何以可伸缩的方式定制Spring Cloud Sleuth,以便为每个跨度添加信息
到目前为止,我已经尝试过:
使用我自己的GenericFilterBean
和HandlerInterceptorAdapter
实现,在构造函数中给它们一个Tracer
,并在每次使用tracer.addTag("key", "value")
调用它们时写入标记
我了解了新行李信息的概念——但我的理解是,它对整个跟踪来说是全局性的——由于跟踪有多个跨不同服务/机器的请求,它不符合我在服务/机器级别添加信息的目的
到目前为止,当我检查通过spring-cloud-stream-binder-kafka
写入我的卡夫卡主题的JSON时,过滤器和拦截器的标记设置了一些跨度,但不是全部跨度
所以我的问题是:存在哪些类型的请求/操作来创建跨度,以及有哪些适当的方法来向这些跨度中注入内容。由于我想将这个实现部署到几个微服务上,所以我不想对每个方法都进行注释,也不想做类似的工作密集型方法,因此无法扩展
# 1 楼答案
有很多这样的地方。。。但实际上,我们可以从另一个角度来解决这个问题。只有一个地方你可以钩住——当跨度关闭时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,在报告之前调整跨度。这样,您只能在一个位置添加标记