Yay*_*rón 5 amazon-web-services aws-xray open-telemetry
我将 OpenTelemetry 与 AWS X-Ray 结合使用来跟踪以下之间的 E2E 消息传递:
生产者 (JVM) -> Kafka Broker -> 消费者(多个,基于 Python)
然后,生成的跟踪将发送到 AWS OTEL Collector,后者将其转发到 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()
Run Code Online (Sandbox Code Playgroud)
然而,即使我开始一个新段并指定:trace_id和,这仍然在 AWS X-Ray 中显示为子段parent_id。我已确认这两个属性均不为空且有效。
如何在 AWS X-Ray 中为此持续跟踪生成新分段?我最好使用 OpenTelemetry(代理/sdk/收集器)来执行此操作,但也可以使用 AWS X-Ray SDK。
我与 AWS X-Ray 团队进行了交谈,他们帮助我解决了问题。
出现此问题的原因是awsxray exporter仅在 时为 Spans 创建新段kind=SpanKind.SERVER。
我已经使用 OpenTelemetry SDK 实现了这一点(在 Python 中),并kind=SpanKind.SERVER在创建新跨度时明确声明
processing_span = self.tracer.start_span(self.service_name, context=current_context, kind=SpanKind.SERVER)
Run Code Online (Sandbox Code Playgroud)
不幸的是,消费者端的 Kafka OpenTelemetry java 检测会自动创建一个新的跨度,其中 kind=CONSUMER 无法修改(作为自动检测的一部分),因此获得我想要的结果的唯一方法是通过手动检测。
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |