透過 Envoy 取得觀測資料

本文說明如何為 Envoy Proxy 產生追蹤記錄和記錄檔。本文也會說明如何將資訊匯出至 Cloud TraceCloud Logging

使用服務網格可觀察服務的來回流量,進而更豐富地監控及偵錯,且不必變更服務本身的程式碼。在 Cloud Service Mesh 使用的 Sidecar 代理程式架構中,代理程式是處理要求及提供必要遙測資訊的元件。遙測資訊必須集中收集及儲存,以供後續使用,例如資料分析、快訊和疑難排解。

示範設定

本文使用下列設定來示範追蹤和記錄:

  • 單一應用程式,可監聽 HTTP 連接埠,並傳回處理要求的虛擬機器 (VM) 執行個體主機名稱。在上圖中,這個應用程式位於右上角,標示為「HTTP service(s) (10.10.10.10:80)」。一或多部 VM 可提供這項服務。
  • 執行這項服務的單一 Compute Engine VM。在圖表中,這標示為「Demo Compute Engine VM」
  • 由 Cloud Service Mesh 安裝及設定的 Envoy 補充 Proxy。在圖表中,這標示為「envoy」
  • 左側方塊中顯示的服務消費者應用程式,是 10.10.10.10:80 上執行的 HTTP 服務消費者。
用於記錄及監控 Envoy 的示範應用程式。
用於記錄及監控 Envoy 的示範應用程式 (按一下可放大)

下列步驟對應圖表中的編號標籤:

  1. Cloud Service Mesh 會設定 Envoy Proxy,以執行下列操作:

    • 10.10.10.10:80 服務進行負載平衡流量。
    • 儲存為這項服務發出的每項要求存取記錄資訊。
    • 產生服務的追蹤資訊。
  2. 消費者將要求傳送至 10.10.10.10 後,Sidecar Proxy 會將要求轉送至正確目的地。

  3. Sidecar 代理程式也會產生必要的遙測資訊:

    1. 在區域磁碟的存取記錄中新增項目,並提供要求的額外資訊。
    2. 使用 OpenCensus Envoy 追蹤功能產生追蹤記錄項目,並傳送至 Trace。
  4. 記錄代理程式會將這項資料匯出至 Cloud Logging API,以便在 Cloud Logging 介面中提供資料。

必要條件

完成設定步驟前,請確認已完成下列事項:

  1. 已啟用 Traffic Director API,並符合其他必要條件,如「準備透過 VM 和無 Proxy 工作負載進行設定」一文所述。
  2. 已啟用 Cloud Trace API
  3. Compute Engine VM 使用的服務帳戶已設定下列身分與存取權管理 (IAM) 角色:
  4. 防火牆規則可允許流量傳送至您在此設定中設定的 VM。

設定示範服務和 Cloud Service Mesh

本文使用多個殼層指令碼,執行設定示範服務所需的步驟。請查看指令碼,瞭解指令碼執行的具體步驟。

  1. 啟動 Compute Engine VM,並在 VM 上設定 HTTP 服務:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh
    chmod 755 setup_demo_service.sh && ./setup_demo_service.sh
    

    setup_demo_service.sh 指令碼會建立 VM 範本,在 VM 啟動時啟動 apache2,並建立使用這個範本的代管執行個體群組。指令碼會啟動單一執行個體,且未啟用自動調度資源功能。

  2. 使用 Cloud Service Mesh 設定 10.10.10.10 服務的路由:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh
    chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
    

    setup_demo_trafficdirector.sh 指令碼會為 Cloud Service Mesh 代管服務設定必要參數。

  3. 啟動執行 HTTP 服務消費者的 Compute Engine VM,並在 VM 上安裝及設定補充 Proxy。在下列指令中,將 PROJECT_ID 替換為要傳送追蹤資訊的專案 ID。這通常是 VM 所屬的專案 Google Cloud 。

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh
    chmod 755 setup_demo_client.sh && ./setup_demo_client.sh PROJECT_ID
    

    setup_demo_client.sh 指令碼會建立 Compute Engine VM,其中預先設定了 Envoy Proxy,可使用 Cloud Service Mesh。

下列額外設定可啟用追蹤和記錄功能:

  • TRAFFICDIRECTOR_ACCESS_LOG_PATHTRAFFICDIRECTOR_ENABLE_TRACING 啟動程序節點中繼資料變數可啟用記錄和追蹤功能,詳情請參閱「為 Cloud Service Mesh 設定 Envoy 啟動程序屬性」。
  • 靜態啟動程序設定可讓您使用 OpenCensus,將追蹤記錄資訊匯出至 Trace。

執行這些指令碼後,您就能登入 td-observability-demo-client VM,並存取 10.10.10.10 提供的 HTTP 服務:

curl http://10.10.10.10

此時,Envoy 會產生存取記錄和追蹤資訊。下節將說明如何匯出記錄和追蹤資訊。

設定將追蹤記錄匯出至 Cloud Trace

執行 setup-demo-client.sh 指令碼時建立的 Envoy 啟動程序設定,足以產生追蹤資訊。其他設定則為選用。如要設定其他參數,請參閱 OpenCensus Envoy 設定頁面,並修改 Envoy 啟動程序設定中的追蹤選項。

對示範伺服器發出範例要求 (curl 10.10.10.10) 後,請前往 Google Cloud 控制台的 Trace 介面 (依序點選「Trace」>「Trace list」)。您會看到與發出的要求相應的追蹤記錄。

如要進一步瞭解如何使用 Trace,請參閱 Cloud Trace 說明文件

設定將存取記錄匯出至 Logging

在這個階段,Envoy 應會將存取記錄資訊記錄到執行所在 VM 的本機磁碟。如要將這些記錄匯出至 Logging,您必須在本機安裝 Logging 代理程式。這需要安裝及設定 Logging 代理程式。

安裝 Logging 代理程式

在要匯出記錄資訊的 VM 上安裝 Logging 代理程式。在這個範例設定中,VM 為 td-observability-demo-vm

curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

詳情請參閱「在單一 VM 中安裝 Cloud Logging 代理程式」。

設定 Logging 代理程式

您可以將 Envoy 記錄匯出為非結構化或結構化文字。

將 Envoy 記錄匯出為非結構化文字

這個選項會將存取記錄中的記錄檔匯出至 Cloud Logging,並以原始文字形式呈現。存取記錄中的每個項目都會匯出為單一項目,這項設定較容易安裝,因為它依賴的剖析器會隨附於目前版本的 Logging 代理程式。不過,使用這個選項時,篩選和處理原始文字記錄項目會比較困難。

  1. 下載並安裝 Envoy 存取記錄非結構化匯出設定檔:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf
    sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  2. 重新啟動代理程式,變更會在代理程式啟動時生效:

    sudo service google-fluentd restart
    

將 Envoy 記錄匯出為結構化文字檔案

  1. 從 GitHub 安裝 Envoy 存取記錄剖析器

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. 下載並安裝設定檔,以結構化格式匯出 Envoy 存取記錄:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf
    sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  3. 重新啟動代理程式,變更會在代理程式啟動時生效:

    sudo service google-fluentd restart
    

詳情請參閱「設定 Logging 代理程式」。

驗證設定

  1. 從 Sidecar Proxy VM 產生對示範服務的要求。 系統會建立新的本機記錄檔記錄。舉例來說,您可以執行 curl 10.10.10.10
  2. 前往 Google Cloud 控制台的「記錄」>「記錄檔探索工具」。 在下拉式選單中,選取 envoy-access 記錄類型。系統會顯示最近一次要求的記錄項目,格式為非結構化或結構化,視您先前選擇的設定類型而定。

疑難排解

請參閱下列各節,瞭解如何排解 Envoy 可觀測性方面的各種問題。

設定跨多個專案的追蹤記錄

如要追蹤部署在多個專案中的 Envoy 要求,請注意下列事項:

  • 每個 Envoy 都必須設定執行所在專案的憑證。
  • 每個 Envoy 都會將追蹤記錄資料傳送至與其執行憑證對應的專案。
  • 如果應用程式在發出要求時保留 X-Cloud-Trace-Context HTTP 標頭的值,您就能查看跨專案要求的追蹤範圍。

與無 Proxy gRPC 應用程式的追蹤記錄相容性

透過 Envoy 的 OpenCensus 追蹤器設定,從無 Proxy 的 gRPC 應用程式和 Envoy Proxy 匯出的追蹤記錄,可在服務網格中完全相容。為確保相容性,Envoy 自我啟動必須設定追蹤內容,在 OpenCensusConfig 中加入 GRPC_TRACE_BIN 追蹤格式,如下所示:

tracing:
  http:
      name: envoy.tracers.opencensus
      typed_config:
        "@type": type.googleapis.com/envoy.config.trace.v2.OpenCensusConfig
        stackdriver_exporter_enabled: "true"
        stackdriver_project_id: "PROJECT_ID"
        incoming_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
        outgoing_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]

如果設定完成,但您沒有看到可用的追蹤或記錄項目,請確認下列事項:

  1. Compute Engine VM 的服務帳戶具備必要的 Trace 和 Logging IAM 權限,如先決條件所述。如要瞭解 Trace IAM 權限,請參閱「存取權控管」。如要瞭解 Logging 權限,請參閱存取權控管
  2. 記錄:確認 /var/log/google-fluentd/google-fluentd.log 中沒有錯誤。
  3. 記錄:發出要求時,請確認本機存取記錄檔中是否顯示新項目。

後續步驟