1 回答
TA贡献1906条经验 获得超3个赞
我遇到了同样的问题并做了一些研究。不幸的是,这是一个已知问题,在最新版本的 AWS Distro for OpenTelemetry Lambda (ADOT Lambda) 中尚未解决
Github 问题票:
跨越github.com/aws-observability/aws-otel-lambda 问题 #229
ADOT 收集器向运行时 API 发送响应,而不是等待发送跟踪github.com/open-telemetry/opentelemetry-lambda 问题 #224
简短的回答:目前 otel 收集器扩展不能可靠地工作,因为它在向导出器发送数据时被 lamda 环境冻结。作为解决方法,您可以将跟踪直接发送到在 lambda 容器外部运行的收集器。
问题是:
lambda 在其执行期间将跟踪发送到收集器扩展进程
收集器将它们排队以将它们发送到配置的导出器
收集器扩展在告诉 lambda 环境扩展已完成之前不会等待收集器完成其队列处理;相反,它总是立即告诉环境它已经完成,而无需查看收集器正在做什么
当 lambda 完成时,扩展已经完成,因此 lambda 容器被冻结,直到下一次 lambda 调用。
下一次 lambda 调用到达时,容器解冻。如果下一次调用很快到来并且花费了足够长的时间,收集器可能能够完成将跟踪发送给导出器。否则,与后端系统的连接在发送完成前超时。
使解决方案复杂化的是,扩展很难检测主 lambda 是否已完成处理。
理想情况下,遥测扩展将:
等待 lambda 完成处理
检查 lambda 是否向其发送任何数据以进行处理和转发
等待所有处理和转发完成(如果有的话)
向 lambda 环境发出扩展已完成的信号
当主 lambda 完成处理时,lambda 扩展协议不会告诉扩展(如果 AWS 可以将其作为新事件类型添加到扩展协议中,那就太好了)。
有一个提议的 PR试图通过假设 lambda 总是发送跟踪来解决这个问题,所以它不是等待 lambda 完成,而是等待对 OTLP 接收器的 TCP 请求到达。这行得通,但如果 lambda 从不发送任何踪迹,它会使扩展永远挂起。
注意:我们在此处看到的跟踪问题同样存在于指标中。
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报