【问题标题】:How can I change trace id in my lambda for xray?如何更改我的 lambda for xray 中的跟踪 ID?
【发布时间】:2020-08-29 12:39:13
【问题描述】:

我的 lambda (Nodejs) 位于 AWS Appsync 后面,启用了 xray。当它收到来自Appsync 的请求时,上下文中有一个trace id:

'x-amzn-trace-id': 'Root=1-5f4a4a2d-b94f96db34d41be1349080d2'
...

此 ID 是在某处自动生成的。有没有办法让我使用不同的跟踪 ID? 事件来到我的 lambda 有一个transactionId,我想使用这个 ID 作为跟踪 ID。我怎样才能在 lambda 中做到这一点?

我的用例是如何跨 dynamodb、延迟应用程序、事件总线等跟踪事件。例如,我的 lambdaA 将一个项目写入 Dynamodb,并且有 3 个 lambdas 被 dynamodb 流触发。这三个 lambda 以不同的方式处理事件。其中一个将事件发送到延迟系统,其中一个发送到事件总线。我想让他们在整个过程中使用相同的跟踪 id。

我可以遵循跟踪 ID 要求。我的主要问题是如何通过不同的服务、应用程序等传递它。

【问题讨论】:

  • 您不应该更改跟踪 ID。它由第一个处理事件的服务分配,该服务启用了 X-Ray。你为什么要改变它?
  • 我已经在问题中给出了我的用例。

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


【解决方案1】:

lambda 函数调用会生成一个跟踪 id 并自动为 lambda 函数创建一个 Segment。该段是不可变的。如果您没有从一开始就使用 X-Ray SDK 生成 traceid,则无法从 lambda 函数外部更改它。在 lambda 函数中,不建议更改跟踪 id,因为它可能会污染跟踪上下文。 AWS X-Ray 跟踪 ID 需要遵循 these requirements 才能被接受。不确定您是否决定注入transactionId,它会起作用。

【讨论】:

  • 我可以按照要求进行。如果我无法更改跟踪 ID,我可以通过不同的服务将其持久化吗?我已经在问题中给出了我的用例。
  • X-Ray 还不支持 DDB 流上的跟踪 id 传播,因此您的消费者 lambda 将断开跟踪。不幸的是,没有解决方法。如果您可以通过 DDB 流以某种方式将 transactionId 传递给 3 个 lambda,则可以将其设置为 lambda 段 (docs.aws.amazon.com/xray/latest/devguide/…) 上的注释。然后在 X-Ray 控制台中,您将能够使用此注释值搜索轨迹。
  • 把它放在注释中并没有真正将跟踪链接为父子关系吗?
猜你喜欢
  • 2020-07-21
  • 2021-08-08
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多