[英]Stackdriver Trace with Google Cloud Run
我一直在深入研究 Google Cloud Run 上的 Stackdriver Trace 集成。 我可以讓它與代理一起工作,但有幾個問題困擾着我。
我進入了 Cloud Endpoints ESP 的源代碼(Cloud Run 集成處於測試階段),看看他們是否以不同的方式解決它,但使用了相同的模式:有一個帶有跟蹤 (1s) 和它會定期清除。
雖然我的跟蹤集成似乎在我的測試設置中工作,但我擔心在生產環境中運行它時不完整和丟失的跟蹤。
這是一個假設的問題還是一個真實的問題?
看起來解決這個問題的正確方法是將遙測數據寫入日志,而不是使用代理進程。 Stackdriver Trace 支持嗎?
這是一個假設的問題還是一個真實的問題?
如果您考慮 Cloud Run 服務接收單個請求,那么這絕對是一個問題,因為在容器實例的 CPU 受到限制之前,庫將沒有時間刷新數據。
但是,在現實生活中的用例中:
請注意,Trace 庫本身通常會對請求進行采樣以進行跟蹤,它們很少會跟蹤 100% 的請求。
看起來解決這個問題的正確方法是將遙測數據寫入日志,而不是使用代理進程。 Stackdriver Trace 支持嗎?
不,Stackdriver Trace 從發送到其 API 的 span 中獲取數據。 請注意,要將數據發送到 Stackdriver Trace,您可以使用 OpenCenss 和 OpenTelemetry 等庫,專有 Stackdriver Trace 庫不是推薦的方式。
你是對的。 這是一個公平的問題,因為大多數跟蹤庫傾向於在后台采樣/上傳跟蹤跨度。
由於 (1) 當容器不處理任何請求時,您的 CPU 幾乎縮放為零,並且 (2) 容器實例可能會因不活動而隨時被終止,因此您無法可靠地上傳應用程序中收集的那些跟蹤范圍。 正如您所說,由於我們沒有完全停止 CPU,它有時可能會起作用,但它並不總是起作用。
看起來某些 Stackdriver(和/或 OpenTelemetry fka OpenCensus)庫讓您可以控制推送跟蹤跨度的生命周期。
例如,OpenCensus Stackdriver 導出器的 Go 包有一個Flush()
方法,您可以在完成請求之前調用該方法,而不是依賴運行時定期上傳跟蹤范圍: https : //godoc.org/contrib.go.opencensus .io/exporter/stackdriver#Exporter.Flush
我假設其他語言的其他跟蹤庫也公開了類似的 Flush() 方法,如果沒有,請在評論中告訴我,這將是對這些庫的有效功能請求。
Cloud Run 現在支持發送 SIGTERM。 如果您的應用程序處理 SIGTERM,它將在關閉前獲得 10 秒的寬限時間。
您可以使用這 10 秒來:
文檔: 容器運行時合約
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.