猿问

OpenTelemetry Lambda 层

有什么办法可以减少 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

}


沧海一幻觉
浏览 100回答 1
1回答

一只名叫tom的猫

我遇到了同样的问题并做了一些研究。不幸的是,这是一个已知问题,在最新版本的 AWS Distro for OpenTelemetry Lambda (ADOT Lambda) 中尚未解决Github 问题票:跨越github.com/aws-observability/aws-otel-lambda 问题 #229ADOT 收集器向运行时 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 从不发送任何踪迹,它会使扩展永远挂起。注意:我们在此处看到的跟踪问题同样存在于指标中。
随时随地看视频慕课网APP

相关分类

Go
我要回答