透過 Envoy 提供的觀測能力
本文件將說明如何為 Envoy 代理程式產生追蹤和記錄。並說明如何將資訊匯出至 Cloud Trace 和 Cloud 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 服務消費者。
下列步驟對應圖表中的編號標籤:
Cloud Service Mesh 會設定 Envoy 代理程式,執行下列操作:
- 負載平衡
10.10.10.10:80
服務的流量。 - 儲存針對此服務發出的每個要求的存取記錄資訊。
- 為服務產生追蹤資訊。
- 負載平衡
在消費者傳送要求至
10.10.10.10
後,附加元件 Proxy 會將要求轉送至正確的目的地。副車 Proxy 也會產生必要的遙測資訊:
- 在本機磁碟的存取記錄中新增項目,並提供有關要求的其他資訊。
- 使用 OpenCensus Envoy 追蹤功能產生追蹤記錄項目,並將其傳送至 Trace。
記錄代理程式會將這項資料匯出至 Cloud Logging API,以便在 Cloud Logging 介面中使用。
事前準備
完成設定步驟前,請確認已完成下列事項:
- 已啟用 Traffic Director API,且符合其他必要條件,如準備使用 VM 和無 Proxy 的工作負載設定一文所述。
- 已啟用 Cloud Trace API。
- Compute Engine VM 使用的服務帳戶已設定下列身分與存取權管理 (IAM) 角色:
- Cloud Trace Agent 角色 (
roles/cloudtrace.agent
) - 記錄寫入者角色 (
roles/logging.logWriter
)
- Cloud Trace Agent 角色 (
- 防火牆規則可允許流量傳送至您在這個設定中設定的 VM。
設定示範服務和 Cloud Service Mesh
本文件會使用多個 Shell 指令碼,執行設定示範服務所需的步驟。查看指令碼,瞭解其執行的具體步驟。
啟動 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,以及使用此範本的代管執行個體群組。指令碼會啟動單一執行個體,但不會啟用自動調度資源功能。使用 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 代管服務設定必要參數。啟動 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_PATH
和TRAFFICDIRECTOR_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 代理程式一起發布的剖析器。不過,使用這個選項時,篩選及處理原始文字記錄項目會比較困難。
下載並安裝 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
重新啟動代理程式,變更會在代理程式啟動時生效:
sudo service google-fluentd restart
以結構化文字格式匯出 Envoy 記錄
從 GitHub 安裝 Envoy 存取記錄剖析器:
sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
下載並安裝設定檔,以便以結構化格式匯出 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
重新啟動代理程式,變更會在代理程式啟動時生效:
sudo service google-fluentd restart
詳情請參閱「設定 Logging 代理程式」。
驗證設定
- 從附加元件 proxy VM 產生對示範服務的要求。這會建立新的本機記錄。例如,您可以執行
curl 10.10.10.10
。 - 在 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"]
如果設定完成,但您沒有看到可用的追蹤或記錄項目,請確認下列事項:
- Compute Engine VM 的服務帳戶具備必要的追蹤和記錄 IAM 權限,如前置條件所述。如要瞭解 Trace IAM 權限,請參閱「存取權控管」一文。如要瞭解記錄權限,請參閱「存取權控管」。
- 記錄:確認
/var/log/google-fluentd/google-fluentd.log
中沒有錯誤。 - 記錄:確保在發出要求時,本機存取記錄檔中會出現新的項目。
後續步驟
- 如需相關資訊,請參閱「無 Proxy gRPC 應用程式的可觀察性」。
- 如需一般 Cloud Service Mesh 疑難排解資訊,請參閱「排解使用 Envoy 的部署問題」。