【问题标题】:AWS X-Ray not initializing a new segmentAWS X-Ray 未初始化新段
【发布时间】:2021-09-11 17:36:51
【问题描述】:

我正在使用 OpenTelemetry 和 AWS X-Ray 来跟踪以下之间的 E2E 消息:

生产者 (JVM) -> Kafka Broker -> 消费者(多个,基于 Python)

然后将生成的跟踪发送到 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()

但是,即使我开始一个新的分段并指定:trace_idparent_id,这仍然显示为 AWS X-Ray 中的子分段。我已经确认这两个属性都不为空且有效。

如何在 AWS X-Ray 中为此持续跟踪生成一个新的?最好是使用 OpenTelemetry (agent/sdk/collector) 来执行此操作,但也可以使用 AWS X-Ray SDK。

【问题讨论】:

    标签: amazon-web-services aws-xray open-telemetry


    【解决方案1】:

    我与 AWS X-Ray 团队进行了交谈,他们帮助我解决了我的问题。

    这个问题的原因是awsxray exporter 只在kind=SpanKind.SERVER 时为 Spans 创建新的段。

    我已经使用 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 正在自动创建一个新的 span,其中 kind=CONSUMER 无法修改(作为自动检测的一部分),因此获得我想要的结果的唯一方法是通过手动检测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多