使用 Cloud Trace 追蹤傳入流量

本文說明如何使用 Cloud Trace,為應用程式負載平衡器設定分散式追蹤。您會建立遙測政策,指定負載平衡器的轉送規則,然後在 Cloud Trace 中查看產生的追蹤記錄。

本文中的範例使用電子商務應用程式,其架構如下:

  • 全域外部應用程式負載平衡器,可接收網路店面的客戶流量。
  • 區域性內部應用程式負載平衡器,可將店面的結帳要求轉送至內部購物車、庫存和付款服務。

如要瞭解分散式追蹤的運作方式,包括取樣模式和追蹤記錄相關資訊標頭處理,請參閱「分散式追蹤總覽」。

事前準備

  1. 在專案中啟用 Cloud Trace API 和 Network Services API:

    gcloud services enable \
        cloudtrace.googleapis.com \
        networkservices.googleapis.com
    
  2. 確認您已部署支援的負載平衡器。如要瞭解詳情,請參考下列資源:

  3. 記下負載平衡器轉送規則的名稱和範圍。轉送規則的範圍取決於負載平衡器類型:

    • 全域轉送規則:由全域外部應用程式負載平衡器和跨區域內部應用程式負載平衡器使用。
    • 區域轉送規則:由區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器使用。

    如要列出專案中的轉送規則,請使用 gcloud compute forwarding-rules list 指令:

    gcloud compute forwarding-rules list
    

必要的角色

如要取得設定遙測政策及查看追蹤記錄所需的權限,請要求管理員授予您專案的下列 Identity and Access Management (IAM) 角色:

如要讓負載平衡器將追蹤記錄 span 寫入 Cloud Trace,請將專案的 Cloud Trace 代理程式角色 (roles/cloudtrace.agent) 授予下列服務帳戶:

  • Compute Engine 服務代理:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
  • 網路安全服務代理: service-PROJECT_NUMBER@gcp-sa-networksecurity.iam.gserviceaccount.com
  • 後端工作負載的服務帳戶 (如果後端將自己的 span 匯出至 Cloud Trace)。如果沒有這個角色,Cloud Trace 只會顯示負載平衡器 Span,追蹤記錄不會包含後端 Span。

將 PROJECT_NUMBER 替換為Google Cloud 專案編號。

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

遙測政策設定

您可以在 YAML 檔案中定義遙測政策,格式如下:

name: "projects/PROJECT_ID/locations/LOCATION/telemetryPolicies/POLICY_NAME"
displayName: "DISPLAY_NAME"
telemetryTarget:
  resources:
  - "FORWARDING_RULE_URI"
tracingConfiguration:
  samplingRate: SAMPLING_RATE
  parentBasedSampling:
    enabled: ENABLE_PARENT_BASED_SAMPLING
    samplingRate: PARENT_BASED_SAMPLING_RATE

下表說明遙測政策中的欄位:

欄位 說明
name

遙測政策的資源名稱。更改下列內容:

  • PROJECT_ID: Google Cloud 專案的 ID。
  • LOCATION:遙測政策的位置,必須與政策指定的轉送規則範圍相符。如果是通用轉送規則,請使用 global。 如果是區域性轉送規則,請使用轉送規則的區域,例如 us-central1。
  • POLICY_NAME:遙測政策的名稱。名稱長度必須介於 4 到 63 個半形字元之間,開頭須為小寫英文字母,只能使用小寫英文字母、數字和連字號,結尾須為小寫英文字母或數字。
displayName 選用。遙測政策的人類可讀名稱 (DISPLAY_NAME)。
telemetryTarget.resources

政策適用的轉送規則完整資源名稱 (FORWARDING_RULE_URI) 清單。最多可以指定 50 項資源。請使用下列其中一種格式:

  • 全域轉送規則://compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME
  • 區域轉送規則://compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME
替換下列內容:
  • FORWARDING_RULE_NAME:轉送規則的名稱
  • REGION:轉送規則的區域,例如 us-central1
tracingConfiguration.samplingRate 要追蹤的要求比例 (SAMPLING_RATE),指定的值介於 0.0 (0%) 到 1.0 (100%) 之間。舉例來說,0.01 會取樣 1% 的要求。預設值為 0.0。
tracingConfiguration.parentBasedSampling.enabled 選用。負載平衡器是否接受傳入 W3C traceparent 標頭 (ENABLE_PARENT_BASED_SAMPLING) 中的取樣標記,為 true 或 false。預設值為 false。僅適用於內部應用程式負載平衡器。
tracingConfiguration.parentBasedSampling.samplingRate 選用。要追蹤的上游取樣要求比例 (PARENT_BASED_SAMPLING_RATE),指定的值介於 0.0 到 1.0 之間。舉例來說,1.0 會追蹤上游用戶端或服務已取樣的所有要求。

設定外部負載平衡器的追蹤功能

本範例會為電子商務店面的全域外部應用程式負載平衡器,設定轉送規則的機率取樣。0.01 的取樣率會追蹤 1% 的要求,擷取邊緣延遲時間和錯誤,同時在高流量期間保持 Cloud Trace 擷取成本可預測。

  1. 建立名為 storefront-tracing-policy.yaml 的 YAML 檔案:

    cat <<EOF > storefront-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/global/telemetryPolicies/storefront-tracing-policy"
    displayName: "Tracing policy for the storefront load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
    EOF
    

    更改下列內容:

    • PROJECT_ID:Google Cloud 專案的 ID
    • FORWARDING_RULE_NAME:負載平衡器的全域轉送規則名稱

    如果是區域性外部應用程式負載平衡器,請將政策名稱中的 global 替換為轉送規則的區域,並使用區域性轉送規則格式。

  2. 使用 gcloud beta network-services telemetry-policies import 指令匯入遙測政策:

    gcloud beta network-services telemetry-policies import storefront-tracing-policy \
        --source=storefront-tracing-policy.yaml \
        --location=global
    

設定內部負載平衡器的追蹤功能

這個範例會為內部結帳和付款服務,設定區域性內部應用程式負載平衡器。這項政策會使用下列取樣設定:

  • 對於不含上游取樣決策的要求,基準 samplingRate 為 0.01 (1%)。
  • 以父項為基礎的取樣,samplingRate 為 1.0 (100%),因此在店面或任何上游服務中已取樣的每個結帳要求,都會透過內部負載平衡器進行追蹤。

如要設定政策,請按照下列步驟操作:

  1. 建立名為 checkout-tracing-policy.yaml 的 YAML 檔案:

    cat <<EOF > checkout-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/REGION/telemetryPolicies/checkout-tracing-policy"
    displayName: "Tracing policy for the internal checkout load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
      parentBasedSampling:
        enabled: true
        samplingRate: 1.0
    EOF
    

    更改下列內容:

    • PROJECT_ID:Google Cloud 專案的 ID
    • REGION:轉送規則的區域,例如 us-central1
    • FORWARDING_RULE_NAME:負載平衡器的區域轉送規則名稱

    如果是跨區域內部應用程式負載平衡器,請在政策名稱中使用 global 做為位置,並使用全域轉送規則格式。

  2. 匯入遙測政策:

    gcloud beta network-services telemetry-policies import checkout-tracing-policy \
        --source=checkout-tracing-policy.yaml \
        --location=REGION
    

驗證遙測政策

如要確認遙測政策是否存在,且指定正確的轉送規則,請使用 gcloud beta network-services telemetry-policies describe 指令:

gcloud beta network-services telemetry-policies describe POLICY_NAME \
    --location=LOCATION

更改下列內容:

  • POLICY_NAME:遙測政策的名稱
  • LOCATION:global 或遙測政策的區域

如要列出某個位置的所有遙測政策,請使用 gcloud beta network-services telemetry-policies list 指令:

gcloud beta network-services telemetry-policies list \
    --location=LOCATION

更新遙測政策

如要變更取樣設定,或將相同政策套用至其他轉送規則,請按照下列步驟操作:

  1. 編輯政策 YAML 檔案。舉例來說,如要將店面政策套用至多個全域轉送規則,請將各個轉送規則新增至 telemetryTarget.resources 清單:

    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/storefront-https-fr"
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/cart-https-fr"
    
  2. 匯入更新後的政策:

    gcloud beta network-services telemetry-policies import POLICY_NAME \
        --source=POLICY_FILE \
        --location=LOCATION
    

    將 POLICY_FILE 替換為政策 YAML 檔案的路徑。

查看追蹤記錄

設定追蹤記錄並透過負載平衡器傳送流量後,請在 Google Cloud 控制台中查看追蹤記錄:

  1. 前往 Google Cloud 控制台的「Trace Explorer」頁面。

    前往「Trace Explorer」

  2. 選取 Google Cloud 專案。

  3. 在「Filter」(篩選器) 欄位中輸入篩選器,找出要檢查的追蹤記錄。例如屬性 ID 或延遲時間門檻。

  4. 如要探索特定追蹤記錄,請前往工具列,按一下「Trace ID」,然後輸入追蹤記錄 ID。

  5. 按一下追蹤記錄,即可在時間軸和圖表檢視畫面中查看其 span。

  6. 檢查負載平衡器 span,查看總時間長度和處理要求的後端等詳細資料。

如要進一步瞭解如何使用 Trace Explorer,請參閱「尋找及探索追蹤記錄」。

將追蹤記錄與記錄和指標建立關聯

您可以將負載平衡器追蹤記錄 span 與要求記錄和指標建立關聯,找出延遲或錯誤的來源。

將追蹤記錄與記錄檔建立關聯

如果您在後端服務上啟用記錄功能,負載平衡器會為取樣要求的每個要求記錄項目新增 trace 欄位。這個欄位採用下列格式:

projects/PROJECT_ID/traces/TRACE_ID

查看負載平衡器記錄項目的追蹤記錄

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往「Logs Explorer」頁面

  2. 展開負載平衡器記錄項目。

  3. 在記錄項目摘要中,按一下追蹤記錄圖示。

    Logs Explorer 中記錄項目摘要旁的追蹤記錄圖示。

  4. 選取「查看追蹤記錄詳細資料」。

追蹤記錄會在「Trace Explorer」頁面中開啟。

從追蹤記錄查看負載平衡器記錄

  1. 前往 Google Cloud 控制台的「Trace Explorer」頁面。

    前往「Trace Explorer」

  2. 按一下追蹤記錄,開啟「Details」(詳細資料) 窗格。

  3. 按一下 [View Logs] (查看記錄)。

系統會顯示要求的負載平衡器記錄項目。

將追蹤記錄與指標建立關聯

比較負載平衡器指標中的延遲時間高峰與追蹤記錄 span 細目,判斷延遲時間是源自負載平衡器還是後端。您可以在 Cloud Monitoring 的「Metrics Explorer」中查看及查詢這些指標。請使用下列指標:

  • 全域外部應用程式負載平衡器:loadbalancing.googleapis.com/https/total_latencies和loadbalancing.googleapis.com/https/backend_latencies
  • 區域性外部應用程式負載平衡器: loadbalancing.googleapis.com/https/external/regional/total_latencies
  • 內部應用程式負載平衡器:loadbalancing.googleapis.com/https/internal/total_latencies

停用追蹤

如要停止追蹤負載平衡器的要求,請執行下列任一操作:

  • 從政策的 telemetryTarget.resources 清單中移除轉送規則,然後匯入更新後的政策。
  • 使用 gcloud beta network-services telemetry-policies delete 指令刪除遙測政策:

    gcloud beta network-services telemetry-policies delete POLICY_NAME \
        --location=LOCATION
    

最佳做法

設定分散式追蹤時,請考量下列最佳做法:

  • 根據流量調整取樣率:如果是高流量的正式環境工作負載,請將 samplingRate 設為 0.01 (1%) 或 0.001 (0.1%),在觀測能力與 Cloud Trace 擷取成本之間取得平衡。
  • 針對多層架構使用以父項為基礎的取樣:在內部應用程式負載平衡器上,啟用以父項為基礎的取樣,以便追蹤上游取樣的要求在每個內部躍點的狀態。
  • 檢測後端:在後端服務中,使用 OpenTelemetry SDK 搭配 W3C 追蹤記錄相關資訊傳播器,讓後端 span 加入負載平衡器啟動的追蹤記錄。

疑難排解

本節說明常見問題和解決方法。

Cloud Trace 未顯示追蹤記錄

如果 Cloud Trace 未顯示追蹤記錄,請按照下列步驟操作:

  1. 確認專案已啟用 Cloud Trace API:

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. 確認「必要角色」中列出的服務帳戶已獲派 Cloud Trace 代理者角色 (roles/cloudtrace.agent)。

  3. 確認遙測政策位於正確位置,且指定正確的轉送規則。詳情請參閱「驗證遙測政策」。

  4. 請檢查設定的 samplingRate。如果流量或取樣率偏低,負載平衡器可能不會立即擷取追蹤記錄。如要確認追蹤功能是否正常運作,請暫時將 samplingRate 設為 1.0,並在測試完成後還原正式環境取樣率。

追蹤記錄 span 斷開或不完整

如果負載平衡器 span 顯示為獨立的根追蹤記錄,而非應用程式追蹤記錄的一部分,請按照下列步驟操作:

  1. 如果是內部應用程式負載平衡器,請確認遙測政策已啟用父項取樣 (parentBasedSampling.enabled: true)。

  2. 確認用戶端和後端工作負載的服務帳戶具備 Cloud Trace 代理程式角色 (roles/cloudtrace.agent),以便將其 span 匯出至 Cloud Trace。

  3. 確認應用程式使用的 OpenTelemetry SDK 已啟用 W3C 追蹤記錄相關資訊傳播功能,以便在服務邊界之間傳播 traceparent 標頭。詳情請參閱 OpenTelemetry context propagation 說明文件。

後續步驟