问题标签 [spring-cloud-sleuth]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - Spring Sleuth 不会将 traceid 和 spanid 填充到 RabbitHandler
我们想将 spring sleuth 与 spring-amqp (rabbitmq) 一起使用。因此,我们通过在发布者网站上发送消息
并期望traceid
与spanid
兔子消息一起发送并填充在接收器/听众站点上,因此它也会记录在听众站点上。
根据这篇文章,我希望这可以开箱即用。
如果我直接(通过跟踪)检查 RabbitMQ 消息,那么我可以看到该信息在消息中不可用,因此它很可能是发件人站点有问题......
我想到的一件事是,我们已经配置了一个Jackson2JsonMessageConverter
允许 json 有效负载:
顺便提一句。log4j 模式配置了%X
并在可用时打印信息:
我错过了什么?
java - 在下游微服务中继续跟踪
我们正在尝试向微服务添加跟踪,以便可以在 google Stackdriver UI 中查看。我们正在使用部署到 Kubernetes 容器中的 Java Springboot 应用程序,每个微服务都通过 http 进行通信。我们已经看到有 Sleuth 和 Zipkin,如果我们将 RestTemplate 移动到一个 bean 上,它们就可以工作。但是,我们真的不想在每个容器中部署 zipkin pod 或创建新的 zipkin 收集器 pod。理想情况下,我们希望仅使用 google cloud tracking sdk 和 sleuth/zipkin 来完成这项工作。使用 sdk,我们可以使用 google cloud grpc 库将数据直接从应用程序发送到 Stackdriver 中。我们现在遇到的问题是我们可以将跟踪 id 发送到下游微服务,但我们似乎无法找到一种方法来在相同的跟踪 id 上创建一个新的跨度,它总是会创建一个新的跨度。我似乎找不到任何有关如何执行此操作的文档。当然,我们正在做的是构建这个库的目的吗?对此有任何帮助的指针都会很棒。
添加更多信息......
我无法提供实际代码,因为这是我的问题,我实际上找不到我想做的事情。
让我尝试用一些代码/伪代码来解释。所以让我们假设这种情况,我有 3 个微服务,A、B 和 C。
希望这对我正在尝试做的事情有意义。
spring-cloud-sleuth - Spring Cloud Sleuth - 在分布式系统中禁用采样
根据 Spring Cloud Sleuth span Sampling ,我们可以控制采样率。
采样器不会阻止生成跨度(相关)ID,但它们会阻止附加和导出标签和事件。默认情况下,如果 span 已经处于活动状态,您将获得一个继续跟踪的策略,但新的策略始终标记为不可导出。
为了减少性能瓶颈,我们可以在运行时禁用部署实例中的跨度 ID 生成而不重新启动应用程序吗?
spring-cloud-sleuth - 运行时追踪方法执行——spring-cloud-sleuth 提供
spring-cloud-sleuth 提供了使用@NewSpan跟踪方法执行的方法
由于它是注释,因此在项目的所有方法上添加注释是不可行的。
此外,在生产环境中,我们只需要在发现执行延迟后跟踪方法执行时间。
有没有办法在运行时启用跟踪方法调用而无需重新启动应用程序?
spring - 跨线程发送 TraceId
我们有一个遵循微服务架构的分布式应用程序。在我们的一项微服务中,我们遵循生产者-消费者模式。
生产者接收请求,将其持久化到数据库,将请求推送到 BlockingQueue 并将响应发送回客户端。运行在单独线程上的消费者正在监听阻塞队列。在它获得请求对象的那一刻,它会对其执行特定的操作。
生产者收到的请求使用 CompleteableFutures 异步持久化到数据库中。
这里的问题是如何将 TraceId 转发给在消费者线程中处理 requestObject 的方法。因为消费者线程可能会在响应发送给消费者之后很久才处理这些对象。
另外如何跨异步调用转发traceId?
谢谢
spring-boot - Spring Cloud sleuth 依赖项在 Spring Boot 堆栈应用程序中抛出 RibbonLoadBalancerClientException
我们计划将 Spring sleuth 集成到我们的 Spring 云微服务应用程序中。但是,当服务 A 使用 RestTemplate 调用服务 B 时,我们会收到 RibbonLoadBalancerClient 异常。请在下面找到堆栈跟踪。
正在使用的版本如下
- Spring Boot:springBootVersion = '1.5.3.RELEASE'
- Spring Sleuth:spring-cloud-starter-sleuth:1.2.4.RELEASE
- Spring Cloud 依赖项:spring-cloud-services 依赖项:1.2.0.RELEASE,spring-cloud-dependencies:Brixton.RELEASE
异常 - 堆栈跟踪:org.springframework.web.util.NestedServletException:处理程序调度失败;嵌套异常是 java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(Ljava/lang/String;Lorg/springframework/cloud/client/ServiceInstance;Lorg/springframework/cloud/client/loadbalancer/LoadBalancerRequest ;)Ljava/lang/Object;| 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:978)| 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)| 在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)|
java - 即使作为 Bluemix 中的标头传递给服务请求,Sleuth 标头 X-B3-TraceId 值也会重新生成
我希望我的服务消费者将 TraceId 作为标题参数传递,名称为 X-B3-TraceId 和有效的 128 位十六进制字符串,该字符串将在进一步的路径中向下传播,并且确实服务会将相同的 Sleuth Trace Id 返回给调用者。我使用 Spring Cloud Sleuth 添加了自定义过滤器和跨度提取器以放入服务响应中。
当应用程序部署在嵌入式 tomcat 中时,整个设置在我的本地运行良好,但是当相同的应用程序部署在 Bluemix 中时,响应没有在请求中传递的相同 Sleuth Trace Id。
在 IBM Bluemix Cloud Foundry 中使用 Sleuth 时,是否有任何已知的此类缺陷和解决此问题的方法?
如果是,请您建议如何进行。
我在以下位置创建了演示项目:https ://github.com/imram/sleuthHeaderIssue
spring-boot - 如何使用 Feign.Builder 实现 Sleuth Tracing?
我正在尝试将 Sleuth 集成到我们的系统中。如果我使用带有 注释的接口@FeignClient
,一切正常。这些接口会自动检测,Sleuth 标头会通过 REST 调用传播。
但是,我们有一些现有代码直接使用 Feign.Builder 和 Feign 注释接口(只是没有用 注释@FeignClient
)。这段代码添加了一些自定义请求拦截器、编码器、代理等。
例如:
我希望这个旧代码能够传播 Sleuth 标头。有什么简单的方法可以把它连接起来吗?
(我想一种选择是重新设计我们的 Feign 接口以使用 @FeignClient 并重新设计所有自定义拦截器、编码器等的应用方式,但最终这可能会带来很多风险。)
我是否需要做一个特殊的请求拦截器来手动注入这些(例如从自动装配的跟踪器)?有没有一种干净的方法(或现有的类)来做到这一点?
spring-cloud - 禁用 AMQP 与 Sleuth 的集成
我有一个使用 Spring Boot Starter AMQP 与 RabbitMQ 集成的基于 Java Spring-Cloud 的微服务(从pom.xml
下面摘录):
现在我想使用 Sleuth 将此服务连接到 Zipkin 监控。根据文档,启用 AMQP 支持后,Sleuth 通过 RabbitMQ 队列发送其所有数据。出于某种原因,我想禁用此默认行为并通过 HTTP 发送数据。可能有一个我找不到的神奇属性。你知道如何强制我的应用程序通过 HTTP 将 Sleuth 相关数据发送到 Zipkin 服务器(也是带有@EnableZipkinServer
注释的 Spring Boot 应用程序)吗?
另外我想提一下,在删除 AMQP 支持后一切正常,即 Zipkin 通过 HTTP 接收跟踪数据。
此外,同时设置spring.zipkin.collector.http.enabled: true
and spring.zipkin.collector.amqp.enabled: false
(and spring.zipkin.collector.rabbitmq.enabled: false
) 也无济于事。
spring-boot - 在 Spring WebFlux 中实现 Spring Cloud Sleuth 的 TracingWebFillter
我有一个使用 Spring Cloud Sleuth 的功能端点(Kotlin)的 Spring Boot Reactive 应用程序。我想自定义响应标头以包含跟踪 ID。我查看了手册并看到了使用 TraceFilter 的部分:1
我尝试使用 TraceWebFilter 做同样的事情,但它没有公开构造函数。使用 Reactive Web Framework 时有没有办法实现这种自定义。
我正在为 Spring Cloud Sleuth 使用 2.0.0.M5 版本
提前致谢!