【问题标题】:How can I create customized trace id for xray?如何为 x 射线创建自定义跟踪 ID?
【发布时间】:2020-08-28 05:19:57
【问题描述】:

我正在构建 lambdas 并使用 xray 来检查性能。我的 lambda 将写入通过流触发另一个 lambda 的其他 dynamodb 表。另一个 lambda 将携带该事件并将数据发布到 RDS 以及外部应用程序中。

我想在这个流程中加入跟踪数据来跟踪整个过程。我知道 AWS 具有在 lambda 中启用 xray 的内置支持。但它并没有涵盖我的应用程序中的整个事件流。有没有办法让我在事件中手动设置跟踪 ID 并让 xray 使用此 ID 来跟踪事件流?

如果我可以手动将跟踪推送到 xray,如何让 dynamodb 流使用跟踪 id 来触发 lambda?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-xray


    【解决方案1】:

    您可以使用跟踪 ID 来完成!跟踪 ID 在请求在服务之间传输时对其进行跟踪。

    这里有更多关于如何使用它的信息:https://docs.aws.amazon.com/xray/latest/devguide/xray-api-sendingdata.html

    继续摇摆!

    【讨论】:

    • 这听起来不错。但就我而言,如何让 dynamodb 流携带跟踪 ID 来触发我的 lambda?我想使用来自 lambda 的相同跟踪 id 将数据保存到 dynamodb 并在另一个 lambda 中接收流式更新事件。
    • @JoeyYiZhao 你有想过这个吗?我认为这是一个有效的问题。似乎没有为非 API 网关事件生成跟踪 ID。我知道在本地你可以为此设置一个环境变量,但不确定它是否有效 - 我会把它作为答案,我们可以从那里开始。
    【解决方案2】:

    X-Ray 尚不支持跟踪 DynamoDB 流。对于您的应用程序结构,如果您在两个 lambdas 上都启用了主动跟踪并检测了下游 AWS 服务调用(在您的情况下为 DDB),您会看到这样的跟踪图(在 DDB 流事件时断开连接):

    客户端 -> Lambda -> LambdaFunction_A -> DDB

    客户端 -> Lambda -> LambdaFunction_B -> RDS

    这是因为 DDB 流当前不传播端到端跟踪所需的跟踪标头。

    另一个限制是,如果没有从上游传入,Lambda 函数调用会生成自己的跟踪 id。您不能在 lambda 函数中覆盖此跟踪 id。

    【讨论】:

      【解决方案3】:

      本地为Serverless,建议使用环境变量:

      # Required for XRAY tracing to work locally
      export AWS_XRAY_CONTEXT_MISSING=LOG_ERROR
      export _X_AMZN_TRACE_ID=some_uuid
      export DISABLE_XRAY_TRACING=1
      

      这对于由非 API 网关事件触发的 lambdas 是否可以远程工作?例如,在您的代码中:

      process.env._X_AMZN_TRACE_ID=abc-123; // some UUID
      

      我有一个related question

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 2023-03-26
        • 1970-01-01
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多