應用程式負載平衡器的分散式追蹤功能,可讓您端對端掌握要求從用戶端經由負載平衡器傳送至後端服務的過程。
Cloud Load Balancing 與 Cloud Trace 整合,可為負載平衡器處理的要求產生追蹤記錄 span。由於負載平衡器是應用程式流量的進入點,因此在負載平衡器啟動及傳播追蹤記錄相關資訊,可確保整個要求路徑的診斷資訊一目瞭然。您可以使用這些追蹤記錄,找出延遲瓶頸、隔離失敗的躍點,以及排解多層架構中的錯誤。
負載平衡器會產生符合開放標準 (W3C 追蹤記錄相關資訊和 OpenTelemetry) 的追蹤記錄。使用 OpenTelemetry 檢測的後端服務,可以繼續執行負載平衡器啟動的追蹤記錄。
主要優點
使用 Cloud Trace 進行分散式追蹤有下列優點:
- 端對端要求瀏覽權限:追蹤要求在外部和內部應用程式負載平衡器,以及流量轉送至的後端服務之間的路徑。
- 邊緣觀測能力:在負載平衡器選取後端之前,擷取轉送規則的追蹤記錄 span,以便查看後端檢測無法偵測到的邊緣錯誤和延遲時間。
- 遙測設定分離:在獨立的
TelemetryPolicy資源中定義追蹤設定,無須變更負載平衡器的轉送設定。 - 跨遙測關聯:將追蹤記錄 span 與 Cloud Load Balancing 要求記錄和 Cloud Monitoring 指標建立關聯,找出延遲或錯誤的來源。
支援的負載平衡器
下表列出支援分散式追蹤的負載平衡器,以及各負載平衡器支援的取樣模式:
| 負載平衡器 | 負載平衡架構 | 機率取樣 | 以父項為依據的取樣 |
|---|---|---|---|
| 全域外部應用程式負載平衡器 | EXTERNAL_MANAGED |
||
| 區域性外部應用程式負載平衡器 | EXTERNAL_MANAGED |
||
| 區域性內部應用程式負載平衡器 | INTERNAL_MANAGED |
||
| 跨區域內部應用程式負載平衡器 | INTERNAL_MANAGED |
傳統版應用程式負載平衡器不支援分散式追蹤。
分散式追蹤的運作方式
如要設定分散式追蹤,請在 Network Services API 中建立 TelemetryPolicy 資源。遙測政策會指定下列項目:
- 目標:要追蹤的負載平衡器轉送規則。
- 追蹤設定:取樣設定,決定負載平衡器追蹤的要求。
當要求抵達遙測政策指定的轉送規則時,負載平衡器會決定是否要對要求進行取樣。如果要求經過取樣,負載平衡器會產生追蹤記錄 span、將 span 傳送至 Cloud Trace,並在 W3C traceparent 要求標頭中將追蹤記錄相關資訊傳播至後端。
轉送規則連結
遙測政策會指定負載平衡器的轉送規則,代表負載平衡器的前端。在轉送規則附加追蹤記錄後,負載平衡器就能追蹤進入虛擬 IP 位址 (VIP) 和通訊埠的所有流量,包括在負載平衡器選取後端之前失敗的要求。
遙測政策具有下列特性:
- 獨立生命週期:遙測政策與後端服務、網址對應和目標 Proxy 分開。您可以建立、修改或刪除遙測政策,而不必變更負載平衡器轉送流量的方式。
- 可跨前端重複使用:單一遙測政策可指定多個轉送規則,因此您可以在多個負載平衡器前端套用一致的追蹤設定。
- 位置範圍:在
global位置建立遙測政策,指定全域轉送規則,例如全域外部應用程式負載平衡器和跨區域內部應用程式負載平衡器使用的規則。在區域中建立遙測政策,指定該區域的區域性轉送規則,例如區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器使用的規則。
取樣模式
分散式追蹤支援下列取樣模式。如要進一步瞭解各負載平衡器支援的取樣模式,請參閱本文的「支援的負載平衡器」一節。
- 機率取樣:負載平衡器會取樣固定比例的要求,您可以在
samplingRate欄位中設定。舉例來說,如果值為0.01,系統會對 1% 的要求進行取樣。所有支援的負載平衡器都支援機率取樣。 以父項為依據的取樣:負載平衡器會遵循上游用戶端或服務傳入
traceparent標頭中的取樣決策。您可以在parentBasedSampling欄位中設定以父項為基礎的取樣。僅內部應用程式負載平衡器支援以父項為準的取樣。啟用父項取樣功能後,負載平衡器會按照下列方式處理要求:
- 如果傳入的
traceparent標頭已設定取樣標記,負載平衡器會按照parentBasedSampling.samplingRate欄位中指定的速率對要求進行取樣。舉例來說,將這個欄位設為1.0,即可追蹤上游服務已取樣的所有要求。 - 如果傳入的
traceparent標頭未設定取樣標記,負載平衡器就不會對要求進行取樣。這項行為會遵循上游決策和 OpenTelemetry 規格,防止 Cloud Trace 顯示中斷的追蹤記錄。 - 如果要求不含
traceparent標頭,負載平衡器會套用基準samplingRate。
- 如果傳入的
追蹤記錄相關資訊標頭處理
負載平衡器會按照下列方式處理 W3C traceparent 標頭:
- 未啟用追蹤功能,或未對要求進行取樣:負載平衡器會將傳入的
traceparent標頭轉送至後端,不進行任何變更。 - 要求已取樣,且不含
traceparent標頭:負載平衡器會產生新的追蹤 ID 和 span ID,並將追蹤標記設為03(隨機和取樣)。 - 要求已取樣,且包含
traceparent標頭:負載平衡器會保留傳入的追蹤記錄 ID 和隨機旗標、產生新的 span ID,並設定取樣旗標。
如果後端服務使用 OpenTelemetry SDK 搭配 W3C 追蹤記錄相關資訊傳播器,就會自動讀取 traceparent 標頭並繼續追蹤。詳情請參閱「追蹤記錄相關資訊」。
常見用途
本節說明分散式追蹤的常見情境。
監控店面邊緣
某電子商務店面使用全域外部應用程式負載平衡器接收客戶流量。如要監控邊緣延遲時間和錯誤 (例如 404 回應和 TLS 失敗),請將具有機率取樣的遙測政策附加至店面的轉送規則。在流量高峰事件期間,低取樣率 (例如 0.01 (1%)) 可讓 Cloud Trace 擷取費用保持在可預測的範圍內。
在結帳服務中維持追蹤記錄連續性
結帳要求會從店面透過內部應用程式負載平衡器,傳送至內部購物車、庫存和付款服務。為確保在店面取樣的結帳
要求會在每個內部躍點中追蹤,您
可以使用 1.0 的
parentBasedSampling.samplingRate,在內部負載平衡器上啟用以上層為基礎的取樣。不含上游取樣決策的例行內部流量,會以 samplingRate 的基準取樣。
找出延遲時間瓶頸
當結帳延遲時間增加或 5xx 錯誤激增時,您可以在 Cloud Trace 中比較負載平衡器 span 與負載平衡器要求記錄和延遲時間指標。這項比較有助於判斷問題是源自負載平衡器邊緣、內部負載平衡器躍點,還是後端服務。
定價
負載平衡器不會針對生成追蹤記錄 span 收費。不過,Cloud Trace 會依據 Cloud Trace 定價,收取追蹤記錄 span 擷取費用。
如要管理高流量正式環境工作負載的擷取費用,建議將 samplingRate 設為 0.01 (1%) 或 0.001 (0.1%)。
限制
在預先發布版期間,應用程式負載平衡器的分散式追蹤功能有下列限制:
- 外部應用程式負載平衡器不支援以父項為基礎的取樣。
- 不支援自訂 Span 屬性。
- 您無法使用 Google Kubernetes Engine Gateway API 或 Terraform 設定分散式追蹤。
- 單一遙測政策最多可指定 50 項資源。
Agent Gateway 的分散式追蹤
如果您使用 Agent Gateway 管理 AI 代理的流量,請參閱「透過 Agent Gateway 監控流量」,瞭解如何監控代理流量。