AWS XRay 未显示带有 Kafka 事件源的 lambda 痕迹

问题描述 投票:0回答:1

我设置了以下基础设施:

SelfManagedKafkaEventSource --> Lambda#A* --> ApiGateway#B* --> Lambda#B*

资源*:启用/检测 XRay 的资源

首先,我为

Lambda#A
ApiGateway#B
Lambda#B
中的三个启用了 XRay 和检测代码,因为
Lambda#A
调用了一些外部客户端,而我想要对此进行跟踪。在我的开发环境中手动测试(使用 lambda 控制台)时,没有 KafkaEventSource,一切看起来都很好,即:我得到了每次调用的跟踪。

然后,在我的产品环境中,使用 SelfManagedKafkaEventSource,Xray 停止工作。就在那时,我意识到 Amazon Managed Streaming for Apache Kafka 的 Lambda 函数目前不支持 X 射线跟踪。奇怪的是,它甚至对于

Lambda#B
也停止工作,它没有直接连接到 KafkaEventSource!只有当我手动测试它(通过 lambda 控制台)时它才“有效”。

无论如何,我随后考虑添加一个禁用 XRay 的

KafkaProxy
函数并直接连接到 KafkaEventSource,因此架构将如下所示:

SelfManagedKafkaEventSource --> KafkaProxyLambda --> Lambda#A* --> ApiGateway#B* --> Lambda#B*

但是我仍然没有得到任何类型的痕迹,除非我通过 lambda 控制台手动测试 KafkaProxyLambda。

最后我能找到的唯一解决方案是在 `Lambda#A:

前面添加另一个 api 网关

SelfManagedKafkaEventSource --> KafkaProxyLambda --> ApiGateway#A --> Lambda#A* --> ApiGateway#B* --> Lambda#B*

以前有人处理过这个问题吗?我是否忽略了什么?在这种情况下还有其他方法可以获取痕迹吗?

apache-kafka aws-lambda trace aws-xray
1个回答
0
投票

使用 Kafka 源时,您的 lambda 函数会收到一个跟踪上下文,其中已做出采样决策,而不是进行采样。这就是痕迹不显示的原因。

此跟踪上下文(具有负采样决策)通过

Lambda#A
函数(因为它已被检测)和
KafkaProxyLambda
函数(因为 aws sdk 在没有检测的情况下从 Lambda 获取上下文)传播到下游服务。 最后一个设置有效,因为没有检测的 HTTP 库会破坏上下文传播,因此
ApiGateway#A
不会收到任何跟踪标头,并且会应用 ActiveTracing 配置。

如果您手动覆盖

KafkaProxyLambda --> Lambda#A*
函数中的跟踪上下文并生成新的跟踪标头,则可以使第二个设置(使用
KafkaProxyLambda
)起作用。

© www.soinside.com 2019 - 2024. All rights reserved.