1 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
我遇到了同樣的問題并做了一些研究。不幸的是,這是一個(gè)已知問題,在最新版本的 AWS Distro for OpenTelemetry Lambda (ADOT Lambda) 中尚未解決
Github 問題票:
跨越github.com/aws-observability/aws-otel-lambda 問題 #229
ADOT 收集器向運(yùn)行時(shí) API 發(fā)送響應(yīng),而不是等待發(fā)送跟蹤github.com/open-telemetry/opentelemetry-lambda 問題 #224
簡(jiǎn)短的回答:目前 otel 收集器擴(kuò)展不能可靠地工作,因?yàn)樗谙驅(qū)С銎靼l(fā)送數(shù)據(jù)時(shí)被 lamda 環(huán)境凍結(jié)。作為解決方法,您可以將跟蹤直接發(fā)送到在 lambda 容器外部運(yùn)行的收集器。
問題是:
lambda 在其執(zhí)行期間將跟蹤發(fā)送到收集器擴(kuò)展進(jìn)程
收集器將它們排隊(duì)以將它們發(fā)送到配置的導(dǎo)出器
收集器擴(kuò)展在告訴 lambda 環(huán)境擴(kuò)展已完成之前不會(huì)等待收集器完成其隊(duì)列處理;相反,它總是立即告訴環(huán)境它已經(jīng)完成,而無需查看收集器正在做什么
當(dāng) lambda 完成時(shí),擴(kuò)展已經(jīng)完成,因此 lambda 容器被凍結(jié),直到下一次 lambda 調(diào)用。
下一次 lambda 調(diào)用到達(dá)時(shí),容器解凍。如果下一次調(diào)用很快到來并且花費(fèi)了足夠長(zhǎng)的時(shí)間,收集器可能能夠完成將跟蹤發(fā)送給導(dǎo)出器。否則,與后端系統(tǒng)的連接在發(fā)送完成前超時(shí)。
使解決方案復(fù)雜化的是,擴(kuò)展很難檢測(cè)主 lambda 是否已完成處理。
理想情況下,遙測(cè)擴(kuò)展將:
等待 lambda 完成處理
檢查 lambda 是否向其發(fā)送任何數(shù)據(jù)以進(jìn)行處理和轉(zhuǎn)發(fā)
等待所有處理和轉(zhuǎn)發(fā)完成(如果有的話)
向 lambda 環(huán)境發(fā)出擴(kuò)展已完成的信號(hào)
當(dāng)主 lambda 完成處理時(shí),lambda 擴(kuò)展協(xié)議不會(huì)告訴擴(kuò)展(如果 AWS 可以將其作為新事件類型添加到擴(kuò)展協(xié)議中,那就太好了)。
有一個(gè)提議的 PR試圖通過假設(shè) lambda 總是發(fā)送跟蹤來解決這個(gè)問題,所以它不是等待 lambda 完成,而是等待對(duì) OTLP 接收器的 TCP 請(qǐng)求到達(dá)。這行得通,但如果 lambda 從不發(fā)送任何蹤跡,它會(huì)使擴(kuò)展永遠(yuǎn)掛起。
注意:我們?cè)诖颂幙吹降母檰栴}同樣存在于指標(biāo)中。
- 1 回答
- 0 關(guān)注
- 171 瀏覽
添加回答
舉報(bào)