透過 Envoy 提供的觀測能力

本文件將說明如何為 Envoy 代理程式產生追蹤和記錄。並說明如何將資訊匯出至 Cloud TraceCloud Logging

使用服務網格可讓您觀察進出服務的流量,無須變更服務本身的程式碼,即可進行更豐富的監控和偵錯作業。在 Cloud Service Mesh 使用的附加元件 Proxy 架構中,Proxy 是處理要求並提供必要遙測資訊的元件。您必須收集並將遙測資訊儲存在集中位置,以利日後使用,例如資料分析、快訊和疑難排解。

示範設定

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

  • 單一應用程式,可監聽 HTTP 通訊埠,並傳回提供要求的虛擬機器 (VM) 執行個體主機名稱。在圖表中,這個應用程式位於右上角,標示為「HTTP 服務 (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 代理程式,執行下列操作:

    • 負載平衡 10.10.10.10:80 服務的流量。
    • 儲存針對此服務發出的每個要求的存取記錄資訊。
    • 為服務產生追蹤資訊。
  2. 在消費者傳送要求至 10.10.10.10 後,附加元件 Proxy 會將要求轉送至正確的目的地。

  3. 副車 Proxy 也會產生必要的遙測資訊:

    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

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

  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. 啟動 Compute Engine VM,執行 HTTP 服務的消費者,並在 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 代理程式,以便使用 Cloud Service Mesh。

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

  • TRAFFICDIRECTOR_ACCESS_LOG_PATHTRAFFICDIRECTOR_ENABLE_TRACING 引導程序節點中繼資料變數可啟用記錄和追蹤功能,如為 Cloud Service Mesh 設定 Envoy 引導程序屬性所述。
  • 靜態 Bootstrap 設定可透過 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 上安裝記錄代理程式。在這個範例設定中,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。這項設定較容易安裝,因為它會依賴與目前版本的 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. 從附加元件 proxy VM 產生對示範服務的要求。這會建立新的本機記錄。例如,您可以執行 curl 10.10.10.10
  2. 在 Google Cloud 控制台中,依序前往「Logging」>「Logs Explorer」。在下拉式選單中,選取「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 的服務帳戶具備必要的追蹤和記錄 IAM 權限,如前置條件所述。如要瞭解 Trace IAM 權限,請參閱「存取權控管」一文。如要瞭解記錄權限,請參閱「存取權控管」。
  2. 記錄:確認 /var/log/google-fluentd/google-fluentd.log 中沒有錯誤。
  3. 記錄:確保在發出要求時,本機存取記錄檔中會出現新的項目。

後續步驟