为了账号安全,请及时绑定邮箱和手机立即绑定

OpenTelemetry Lambda 层

OpenTelemetry Lambda 层

Go
沧海一幻觉 2023-03-15 13:48:22
有什么办法可以减少 Lambda 层丢弃的事件吗?在痕迹到达中央收集器之前,它会不断丢弃痕迹。在导出跟踪之前,它将获取令牌以授权将跟踪发送到中央收集器。但它不会在删除时推送跟踪,因为 lambda 函数执行已经完成。Lambda 扩展层参考:https://github.com/open-telemetry/opentelemetry-lambda/tree/main/collector出口商错误:Exporting failed. No more retries left. Dropping data.{    "kind": "exporter",    "data_type": "traces",    "name": "otlp",    "error": "max elapsed time expired rpc error: code = DeadlineExceeded desc = context deadline exceeded",    "dropped_items": 8}
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我遇到了同样的问题并做了一些研究。不幸的是,这是一个已知问题,在最新版本的 AWS Distro for OpenTelemetry Lambda (ADOT Lambda) 中尚未解决

Github 问题票:

简短的回答:目前 otel 收集器扩展不能可靠地工作,因为它在向导出器发送数据时被 lamda 环境冻结。作为解决方法,您可以将跟踪直接发送到在 lambda 容器外部运行的收集器。

问题是:

  • lambda 在其执行期间将跟踪发送到收集器扩展进程

  • 收集器将它们排队以将它们发送到配置的导出器

  • 收集器扩展在告诉 lambda 环境扩展已完成之前不会等待收集器完成其队列处理;相反,它总是立即告诉环境它已经完成,而无需查看收集器正在做什么

  • 当 lambda 完成时,扩展已经完成,因此 lambda 容器被冻结,直到下一次 lambda 调用。

  • 下一次 lambda 调用到达时,容器解冻。如果下一次调用很快到来并且花费了足够长的时间,收集器可能能够完成将跟踪发送给导出器。否则,与后端系统的连接在发送完成前超时。

使解决方案复杂化的是,扩展很难检测主 lambda 是否已完成处理。

理想情况下,遥测扩展将:

  1. 等待 lambda 完成处理

  2. 检查 lambda 是否向其发送任何数据以进行处理和转发

  3. 等待所有处理和转发完成(如果有的话)

  4. 向 lambda 环境发出扩展已完成的信号

当主 lambda 完成处理时,lambda 扩展协议不会告诉扩展(如果 AWS 可以将其作为新事件类型添加到扩展协议中,那就太好了)。

一个提议的 PR试图通过假设 lambda 总是发送跟踪来解决这个问题,所以它不是等待 lambda 完成,而是等待对 OTLP 接收器的 TCP 请求到达。这行得通,但如果 lambda 从不发送任何踪迹,它会使扩展永远挂起。

注意:我们在此处看到的跟踪问题同样存在于指标中。


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信