当前位置: 首页 > 知识库问答 >
问题:

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

华甫
2023-03-14

我使用Kafka来实现微服务之间的呼叫同步,并使用SpringSleuth进行日志记录。日志记录是可以的,但是当有一条消息从MicroService 1发送到MicroService 2时,日志记录的消息具有不同的跟踪ID。它们不是必须具有相同的跟踪ID但具有不同的SpanId吗?是否有任何特殊配置?

共有1个答案

汪德寿
2023-03-14

默认情况下,Spring Cloud Kafka活页夹不会传输消息头,您必须通过Spring进行设置。云流动Kafka。粘合剂标题如Spring Cloud Stream参考指南中所述手动设置。然后检查那些与跟踪相关的头文件是否已正确发送。

您可以在application.yml中设置Zipkin标题如下:

spring:
  cloud:
    stream:
      kafka:
        binder:
          headers:
            - X-B3-TraceId
            - X-B3-SpanId
            - X-B3-Sampled
            - X-B3-ParentSpanId
            - X-Span-Name
            - X-Span-Export

或者在你的application.properties:

spring.cloud.stream.kafka.binder.headers[0]=X-B3-TraceId
spring.cloud.stream.kafka.binder.headers[1]=X-B3-SpanId
spring.cloud.stream.kafka.binder.headers[2]=B3-Sampled
spring.cloud.stream.kafka.binder.headers[3]=X-B3-ParentSpanId
spring.cloud.stream.kafka.binder.headers[4]=X-Span-Name
spring.cloud.stream.kafka.binder.headers[5]=X-Span-Export

或在逗号分隔的列表中:

spring.cloud.stream.kafka.binder.headers=X-B3-TraceId,X-B3-SpanId,B3-Sampled,\
    X-B3-ParentSpanId,X-Span-Name,X-Span-Export
 类似资料:
  • 我正在尝试运行一个Spring启动应用程序,并在Sleuth的支持下跟踪其执行情况。日志显示了服务名称,但没有显示跟踪id或跨度id。我得到的只是[myservice,,,,]。 我错过了什么? 这是日志中的一些台词。 2017-04-30 14:41:38.750INFO[myservice,,] 7 --- [ main]s. c. a.注释配置应用上下文:刷新org.springframew

  • 我很难找到任何合适的例子来演示如何找到跟踪并将其存储在本地MySQL数据库中。我使用zipkin服务器来可视化我对微服务的分布式跟踪。如果有人在最新版本中与gradle一起使用Spring Cloud Sleuth,请提交一个可以帮助我的完美示例。 这里'我的代码: 建筑格拉德尔 应用性质 控制器。班 应用。班 我已经使用zipkin-server-2.23.2-exec jar在localhos

  • 跟踪行为控制着 Entity Framework Core 是否会在其变更跟踪器里维持实体实例的信息。如果实体是被跟踪的,任何检测到的该实体的变更都将在 SaveChanges() 时持久化到数据库中。Entity Framework Core 还会对已跟踪的、之前已加载到 DbContext 实例中的查询和实体进行相互的导航属性装配。 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。

  • 我有一个Kafka实例和一个简单的Spring Boot应用程序,其中有一个REST控制器和一个bean。控制器接受一个简单的消息,并通过将其发送给Kafka。我想让记录一条信息消息,但缺少跟踪id和span id。在我看来,它应该包括在日志中。 我使用SpringCloud侦探和SpringKafka启动器。 消息本身通过Kafka主题成功发送到另一个正确获取跟踪标识的Spring Boot应用

  • 我希望为每个请求生成唯一的traceId,并将其传递给所有服务。在SpringMVC中,使用MDC上下文并将traceId放在头文件中相当容易,但在反应式堆栈中,由于ThreadLocal,它根本不起作用。 一般来说,我希望使用单个traceId记录我拥有的每个服务上的每个请求和响应,该traceId可以识别整个系统中的特定操作。 我试图根据文章创建自定义过滤器:https://azizulhaq

  • 我有一个spring应用程序,它接受长期存在的连接——每个请求启动一个kafka消费者,然后它将消费和处理的消息写入请求客户端。每个已使用的kafka消息都包含侦探跟踪头,例如: 但是,由于kafka使用者是根据传入请求动态生成的,因此每个传入请求都会生成另一组span/id。 因此,在将kafka消息推送到客户端之前,在处理kafka消息期间生成的所有日志都会使用请求的跟踪/跨度进行跟踪,在我的