问题标签 [distributed-tracing]
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.
java - Spring cloud sleuth ExtraFieldPropagation在Spring cloud Gateway Filter中失败
我们有三个Gateway
使用spring-cloud-gateway
,Service1
和的模块Service2
。网关呼叫service1
和service1
呼叫service2
。Service1
并且Service2
正在使用 spring web Flux Gateway 有 3 个过滤器。全局过滤器、前置过滤器和后置过滤器。
在全局过滤器中,我们从设置为新行李键的请求正文设置中读取值。
我们还设置了如下所示的 Slueth 属性,以便将其打印在日志中并转发到下一个服务(service1
和service2
)
我们面临的问题是
X-CUST_TRAN_ID
值通过请求和响应发送并打印在service1
andservice2
的日志中,但Gateway
本身不打印。
它不会在GlobalFilter
's 的日志或PreFilter
日志语句中打印,而是在PostFilters
日志语句中打印。由于CUST_TRAN_ID
设置在GlobalFilter
's 过滤器中,它应该在设置为上下文后打印在日志语句中。
请帮助以更好的方式设置传播字段以及在日志语句中打印。
distributed - 在特使中自动传播痕迹
基于文档,envoy 能够生成跟踪并将跟踪传播到 Jaeger 服务集群。
它还指出
为了充分利用跟踪,应用程序必须传播 Envoy 在调用其他服务时生成的跟踪标头。
因此,假设如果客户端调用 -> 服务 A -> 调用服务 B,则服务 A 被代理在特使后面。如果服务 A 调用服务 B,那么从 A 到 B 的调用也必须通过 envoy right。所以客户端调用服务A时envoy最初生成的跟踪Id,不会传播到服务B。
为什么应用程序(服务 A)需要转发这些标头?
kubernetes - istio 中的 envoy 可以跟踪外部 https api 吗?
我们使用 istio 来使用分布式跟踪。我们的微服务有时需要访问外部 API,这些 API 通常通过 https 进行通信。
为了测量整个系统的准确性能,我们希望在访问外部 API 时跟踪通信。
但是,分布式跟踪需要访问请求的标头,但是 https 不允许访问,因为标头是加密的。
为了确认,我在启用了 istio 的 GKE 上部署 bookinfo,进入 productpage pod 的 productpage 容器,并执行以下命令。
zipkin 上只显示 http 通信。
是否可以得到一系列的踪迹,包括使用外部 https 的 API?
executorservice - 为 Completable 期货触发新的 Sleuth Tracer
我正在尝试为 Spring Boot 微服务的分布式跟踪实现 Slueth,这些微服务通过消息传递通道相互通信。
其中一个微服务是一个调度程序,它可以挑选一天创建的新消费者。然后它以异步方式为每个消费者的数据运行分组过程。
现在我正在使用 traceableExeucutorService 将调度程序线程生成的侦探跟踪传递给每个消费者的子线程。
跟踪配置
调度服务
这最终会为每个消费者使用相同的 traceId,因此所有下游服务都会为每个消费者记录相同的 traceId。
我希望每个消费者线程都有自己的 traceId 的原因是这些子线程将依次将消息发布到下游服务。由于调度程序应该每天只运行一次,因此每个消费者一天的日志最终都会具有相同的 traceId 并破坏了跟踪的整个目的。
两个调度程序的原始日志运行,每个消费者使用相同的 traceId
所以我在异步操作调用的方法中创建了一个新的 Tracer,但我仍然看到主线程的 traceId 被记录。所以我不得不手动提取traceId和spanId,然后将其添加到ThreadContext。这是实现这一点的预期方式,还是有一个更优雅的解决方案,只需启动一个新的 Trace 就会将值添加到 ThreadContext。
更新了 getConsumerData
使用消费者级别 TraceId 更新日志
istio - 如何在 istio 中指定外部 zipkin 收集器?
我想在 istio 中使用 stackdriver trace 作为分布式跟踪的后端。我在 GCP 的虚拟机上安装了 Docker,并运行了 zipkin-gcp 的镜像。
然后,根据官方文档,我将 istio 配置为将 spans 发送到此 VM。
但是,堆栈驱动程序跟踪中没有显示任何跟踪。
为了隔离问题,我停止了 zipkin-gcp 并检查了是否使用 tcpdump 发送了数据包。
结果发现什么都没有发送。我已经确认了从 kubernetes 集群到 VM 的端口 9411 连接。
如何使用 istio 向外部 zipkin 服务器发送跟踪信息?
spring-boot - Spring sleuth Baggage 密钥未传播
我有一个过滤器(OncePerRequestFilter),它基本上拦截传入的请求并记录traceId,spanId等,效果很好,这个过滤器位于一个公共模块中,该模块包含在其他项目中,以避免在我的所有微服务中包含spring sleuth依赖,我将它创建为库的原因是因为对库的任何更改对所有模块都是通用的。现在我要添加一个新的传播密钥,该密钥需要通过诸如 trace 和 spanId 之类的 http 标头传播到所有服务,因为我已经从 HttpTracing 中提取了当前跨度并向其添加了行李密钥(如下所示)
我已将传播密钥和列入白名单的 mdc-keys 添加到我的 application.yml (与我的库)文件中,如下所示
在过滤器中进行此更改后,当我对具有相同应用程序的另一个服务进行 http 调用时,corelationId 不可用,基本上密钥不会被传播。
apache-flink - 跟踪上下文丢失了 opentracing 并为 kafka 勇敢
我有一些使用 kafka 作为源和接收器的 flink 作业,我想向它添加跟踪,以便从 Kafka 消费/产生的任何消息都可以很好地跟踪,因为我正在使用 kafka 拦截器来拦截消息并记录trace、span 和 parent traceId,因为我将 opentracing-kafka-client(v0.1.11) 与 brave-opentracing(v0.35.1) 结合使用,这是我使用自定义拦截器的原因,因为我需要记录消息以指定的格式。
配置拦截器后,它们被调用,它使用来自上游系统的跟踪信息(来自标头)并记录它,但是当再次向 kafka 生成消息时,跟踪上下文丢失,例如考虑以下场景
1) 一些 rest 服务放在 Kafka 上的消息 2) flink 作业和拦截器消耗的消息启动并使用 header 中的跟踪信息并记录它 3) 处理后由 flink 作业产生到 Kafka 的消息
它在第 2 步之前运行良好,但是在生成消息时,不使用上一步的跟踪信息,因为它没有任何标头信息,因此它会产生全新的跟踪。
我正在注册跟踪器,如下所示:-
我正在使用TracingConsumerInterceptor
和TracingProducerInterceptor
来自opentracing kafka。
telemetry - OpenTelemetry(Java)中父子跨度的相同跨度ID
我正在学习 OpenTelemetry (Java)。我创建了一个控制器。在控制器方法中,我创建了一个跨度。然后从中调用服务类的方法。我在服务方法中创建了另一个跨度。在控制台上打印两个 span 的上下文时,两个 span 的 traceId 相同(应该相同)但它们的 spanId 也相同。这是默认行为还是我做错了什么。
telemetry - 使用 OpenTelemetry 设置 Jaeger
我已经构建了一个示例应用程序来了解使用 OpenTelemetry 的跟踪和跨度。我想在 Jaeger UI 中看到它们。如何使用我使用 OpenTelemetry 进行跟踪的应用程序设置 Jaeger?
azure - 在 Azure API 管理中检查 traceparent http 标头的正确性
有没有办法在转发到后端服务之前使用 Azure API 管理策略检查traceparent http 标头的正确性?