AWS X-Ray 未初始化新段
AWS X-Ray not initializing a new segment
我将 OpenTelemetry 与 AWS X-Ray 结合使用来跟踪以下之间的端到端消息传递:
生产者 (JVM) -> Kafka Broker -> 消费者(多个,Python-based)
生成的跟踪随后被发送到 AWS OTEL 收集器,后者将它们转发到 AWS X-Ray。
然而,当我从 X-Ray 中看到它们时,消费者跟踪显示为生产者的子段:
我希望将消费者视为一个单独的细分市场。
我还尝试在消费者端使用 AWS X-Ray SDK 来显式初始化一个新段,如下所示:
val traceId = TraceIdData(String(record.headers().headers("X-Amzn-Trace-Id").first().value()))
logger.debug("Trace Id {}, Parent Id {}", traceId.root, traceId.parent)
AWSXRay.beginSegment("Simple Kafka Consumer", traceId.root, traceId.parent)
... some processing ...
AWSXRay.endSegment()
然而,这在 AWS X-Ray 中仍显示为子分段,即使我开始一个新分段并指定:trace_id
和 parent_id
。我已确认这两个属性均不为空且有效。
如何在 AWS X-Ray 中为此持续跟踪生成新的 段?我最好使用 OpenTelemetry (agent/sdk/collector) 来执行此操作,但也可以使用 AWS X-Ray SDK。
我与 AWS X-Ray 团队进行了交谈,他们帮助我解决了问题。
出现此问题的原因是 awsxray exporter
仅在 kind=SpanKind.SERVER
.
时为 Span 创建新段
我已经使用 OpenTelemetry SDK 实现了这个(在 Python 中)并在创建新跨度时明确声明 kind=SpanKind.SERVER
processing_span = self.tracer.start_span(self.service_name, context=current_context, kind=SpanKind.SERVER)
这给了我在服务地图中看到多个消费者的期望结果
不幸的是,OpenTelemetry java instrumentation for Kafka on consumer side 正在自动创建一个新的跨度,其中 kind=CONSUMER 无法修改(作为自动检测的一部分),因此获得我想要的结果的唯一方法是通过手动检测。
我将 OpenTelemetry 与 AWS X-Ray 结合使用来跟踪以下之间的端到端消息传递:
生产者 (JVM) -> Kafka Broker -> 消费者(多个,Python-based)
生成的跟踪随后被发送到 AWS OTEL 收集器,后者将它们转发到 AWS X-Ray。
然而,当我从 X-Ray 中看到它们时,消费者跟踪显示为生产者的子段:
我希望将消费者视为一个单独的细分市场。
我还尝试在消费者端使用 AWS X-Ray SDK 来显式初始化一个新段,如下所示:
val traceId = TraceIdData(String(record.headers().headers("X-Amzn-Trace-Id").first().value()))
logger.debug("Trace Id {}, Parent Id {}", traceId.root, traceId.parent)
AWSXRay.beginSegment("Simple Kafka Consumer", traceId.root, traceId.parent)
... some processing ...
AWSXRay.endSegment()
然而,这在 AWS X-Ray 中仍显示为子分段,即使我开始一个新分段并指定:trace_id
和 parent_id
。我已确认这两个属性均不为空且有效。
如何在 AWS X-Ray 中为此持续跟踪生成新的 段?我最好使用 OpenTelemetry (agent/sdk/collector) 来执行此操作,但也可以使用 AWS X-Ray SDK。
我与 AWS X-Ray 团队进行了交谈,他们帮助我解决了问题。
出现此问题的原因是 awsxray exporter
仅在 kind=SpanKind.SERVER
.
我已经使用 OpenTelemetry SDK 实现了这个(在 Python 中)并在创建新跨度时明确声明 kind=SpanKind.SERVER
processing_span = self.tracer.start_span(self.service_name, context=current_context, kind=SpanKind.SERVER)
这给了我在服务地图中看到多个消费者的期望结果
不幸的是,OpenTelemetry java instrumentation for Kafka on consumer side 正在自动创建一个新的跨度,其中 kind=CONSUMER 无法修改(作为自动检测的一部分),因此获得我想要的结果的唯一方法是通过手动检测。