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

为什么Kafka producerListener没有记录跟踪id和span id?

宋飞文
2023-03-14

我有一个Kafka实例和一个简单的Spring Boot应用程序,其中有一个REST控制器和一个ProducerListenerbean。控制器接受一个简单的字符串消息,并通过KafkaTemplate将其发送给Kafka。我想让ProducerListener记录一条信息消息,但缺少跟踪id和span id。在我看来,它应该包括在日志中。

我使用SpringCloud侦探和SpringKafka启动器。

消息本身通过Kafka主题成功发送到另一个正确获取跟踪标识的Spring Boot应用程序,所以我假设这个问题只与producerListener有关。

我试过调试代码,结果是使用了方法TracingProducer。发送(…) 。那里的span实例是NoopSpan(这很奇怪),因为TracingCallback没有包装回调,跟踪信息丢失。有一些讨厌的比特操作我不明白。jar就是这个brave-instrumentation-kafka-clients-5.7.0。jar

控制器

@PostMapping("/pass-to-kafka")
public void passToKafka(@RequestBody String message) {
   logger.info("This log message has trace id and span id");
   kafkaTemplate.send("my-test-topic", message);
}

制片人听众

@Bean
public ProducerListener myProducerListener() {
    return new ProducerListener<>() {
        @Override
        public void onSuccess(ProducerRecord producerRecord, RecordMetadata recordMetadata) { 
            logger.info("This log message is missing trace id and span id");
        }
    };
}

代码为的项目位于GitHub上:https://github.com/vaclavnemec/kafka-sleuth-problem

我希望信息消息写出跟踪id和跨度id。这两个记录器中的值应该相同。

INFO [bar,208706b5c40f8e93,208706b5c40f8e93,false] com.example.demo.Controller: This log message has trace id and span id
.
.
.
INFO [bar,,,] com.example.demo.DemoApplication: This log message is missing trace id and span id

共有1个答案

危斯伯
2023-03-14

请设置spring.sleuth.probability=1.0如留档和自述文件所述。然后你会打开追踪。

 类似资料:
  • 我有一些微服务作为分布式日志管理器与Spring Cloud Sleuth一起运行。对于一些微服务,还包括Spring AOP,主要是关于方法执行时间日志的建议(下面的代码)。 现在,我可能在这里错过了AOP点,并且不太明白建议何时真正生效,但是否有可能将Sleuth跟踪ID包含在从定义的类生成的日志中? 代码: 方面类(从组织aspectj和组织slf4j导入): Spring Boot版本为2

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

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

  • 我希望通过使用一个新表来存储一个日志,其中记录了在每次更新/插入中进行更改的用户、日期以及任何更改的内容,从而实现对我的一个模型实体的历史记录跟踪/审核。 我使用EclipseLink作为我的JPA提供者,但我不想使用它的历史策略,因为提供者将来可能会改变。出于同样的原因,我不能使用Hibernate Envers。 我研究了SpringData提供的审计支持,但它似乎非常基本,它只允许您存储创建

  • 我正在将一个应用程序从Log4J 1.2.16迁移到Log4J 2.13.3。为此,我使用log4j21.2到2.13.3桥。在我自己的开发机器上,一切都运转良好。但是,当我将应用程序部署到测试服务器时,日志只会发送到根日志记录器,我定义的其他日志文件保持为空。 配置文件完全相同,只是附件中的路径不同。我的开发机器运行Windows,测试服务器运行Linux。该应用程序已部署到Weblogic 1

  • 我正在使用面向微服务的架构进行开发并想要跟踪。我在谷歌上搜索,发现istio具有扩展的标头: x请求ID x-b3-traceid x-b3-spanid x-b3-父spanid x-b3-采样 x-b3-标志 x-ot-span-上下文 我主要想知道和之间的区别,但如果有人可以共享其他人的标头,那就可以了