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

记录源应用程序错误通道的Spring Sleuth Span Id

殳睿
2023-03-14

我有一个使用RabbitMQ事件总线和使用spring cloud stream的应用程序的系统设置。为了帮助通过系统跟踪消息,我还使用了spring cloud sleuth。

我的问题涉及errorChannel流/绑定。我没有在配置中使用错误绑定(参考此)。相反,我有一个流设置来监听errorChannel,它在消息中添加一个额外的头,然后将其发送到错误目标。它看起来类似于以下内容(用Groovy编写):

IntegrationFlows
  .from('errorChannel')
  .log()
  .handle(MessagingException, {e, h -> 
      def message = MessageBuilder.withPayload(e).copyHeaders(h).setHeader('name', 'myApp').build()
      errorSource.channel().send(message)
  .channel('nullChannel')
  .get()

其中,errorSource的通道被声明为输出。

日志行输出类似于:

<代码>信息[myApp,12344321,false]日志处理程序:ErrorMessage[…]

但是,当我从错误目标收到消息时,X-B3-家长SPANId标头中的值与上面日志消息中的跨度ID(4321值)或源应用程序中记录的任何其他跨度ID不匹配。

我能看到匹配的唯一方法是如果我将org.springframework.cloud的日志记录增加到DEBUG,即使这样,它也是TracingChannelInterceptor的日志行(尽管该实例看起来像是属于errorChannel的拦截器列表,所以我觉得我很接近了)。我宁愿不打开DEBUG,因为它显然会变得非常嘈杂。

在所有这些之后,问题是我是否可以在错误通道或绑定本身上设置任何日志记录,以输出一些带有span id的日志行,该span id与放入X-B3-ParentSpanId标题中的内容相匹配?其目的是获取并保存该span id,以便稍后在检查日志时可以使用它直接转到源应用程序。

我们也在保存跟踪id,我认为这很好(并且与源应用程序的跟踪id相匹配),但将跟踪id和span id结合在一起会很有帮助。


共有1个答案

百里沛
2023-03-14

MessaginException具有failedMessage属性;您应该在其标题中找到所需的内容。

 类似资料:
  • 0.3 新版功能. 应用故障,服务器故障。早晚你会在产品中看见异常。即使你的代码是 100% 正确的, 你仍然会不时看见异常。为什么?因为涉及的所有一切都会出现故障。这里给出一些 完美正确的代码导致服务器错误的情况: 客户端在应用读取到达数据时,提前终止请求 数据库服务器超载,并无法处理查询 文件系统满了 硬盘损坏 后端服务器超载 你所用的库出现程序错误 服务器的网络连接或其它系统故障 而且这只是

  • 如果我直接在独立的Tomcat 8上部署我的应用程序,服务器会毫无错误地启动。当我尝试在IntelliJ中启动Tomcat时,我收到了这个NoClassDefFoundError: org/slf4j/Logger,但应用程序无法启动。当我直接在外部Tomcat中部署WAR时,一切都很好。附件是两个POM文件:我已经查看了SO上提供的解决方案,但这种情况是IntelliJ独有的。NoClassDe

  • 我正在开发一个应用程序“Call Recorder”,我已经授予了所有权限,但它并没有记录来电者的声音。我正在使用MediaRecorder。

  • 我有一个Spring Boot应用程序,它支持可以使用应用程序设置的各种配置属性。yaml、环境变量或系统属性。目前,确定支持哪些属性的唯一方法是询问其他开发人员或深入了解属性对象的代码。有没有比这更好的方法来生成某种形式的文档?我搜索了一下,却找不到任何答案,似乎没有人在记录他们的配置,或者是以特别的手动方式进行。理想情况下,通过属性配置的bean将具有Javadoc样式的注释,它们将由Spri

  • 我的应用程序有多个线程将消息发布到单个RabbitMQ集群。 阅读rabbit文档:我阅读了以下内容: 对于使用多个线程/进程进行处理的应用程序,每一个线程/进程打开一个新通道,并且不在它们之间共享通道是非常常见的。 而且我明白,与其开通多个连接(昂贵) 不如开通多个通道。 但是为什么不对所有线程使用单个通道呢? 在单个通道上使用多个通道有什么好处?

  • 我一步一步地遵循这篇论文:https://richonrails.com/articles/google-authentication-in-ruby-on-rails/我创建了一个全新的rails应用程序来测试。但是我一直得到同样的错误:错误:invalid_request 重定向uri的参数值无效:不允许原始IP地址:http://0.0.0.0:3000/auth/google_oauth2