父跨度未在 OpenTelemetry 中与 Kafka 和 Java 连接

问题描述 投票:0回答:1

我正在使用两个通过 Kafka 连接的 Java 服务,并且我已经集成了 OpenTelemetry 来进行分布式跟踪。在服务 A 中,我创建一个父范围,并在 Kafka 消息中包含两个字符串值:traceId 和 spanId。

但是,在服务 B 中,我在使用这些值将新范围连接到父范围时遇到问题。

这是我在服务 B 中尝试过的:

SpanContext spanContext = SpanContext.create(parentTraceId, parentSpanId, TraceFlags.getDefault(), TraceState.getDefault());

Span kafkaMessageSpan = otelTracer.spanBuilder("kafka-message2-processing")
        .setParent(Context.current().with(Span.wrap(spanContext)))
        .startSpan();

kafkaMessageSpan.end();

parentTraceId 和parentSpanId 值在日志中如下所示:

parentTraceId:5e3a44aa9817427c970800316ff717e7 父跨度 ID:91367512fa425dca

我错过了什么?任何帮助,将不胜感激。谢谢!

java apache-kafka trace open-telemetry open-telemetry-collector
1个回答
0
投票

你真的需要这样做吗?如果您使用 OpenTelemetry 来检测您的服务,它将发挥神奇作用。

OpenTelemetry 在消息头中传播来自生产者的父上下文,消费者使用该上下文并构建子跨度并更新跟踪。 即使您想禁用和启用传播,也有一个配置。

otel.instrumentation.kafka.client-propagation.enabled = true # default

参考以下门票:

票1.
票2

查看代码这里

© www.soinside.com 2019 - 2024. All rights reserved.