透過 Envoy 取得觀測資料
本文說明如何為 Envoy Proxy 產生追蹤記錄和記錄檔。本文也會說明如何將資訊匯出至 Cloud Trace 和 Cloud 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 服務消費者。
下列步驟對應圖表中的編號標籤:
Cloud Service Mesh 會設定 Envoy Proxy,以執行下列操作:
- 為
10.10.10.10:80
服務進行負載平衡流量。 - 儲存為這項服務發出的每項要求存取記錄資訊。
- 產生服務的追蹤資訊。
- 為
消費者將要求傳送至
10.10.10.10
後,Sidecar Proxy 會將要求轉送至正確目的地。Sidecar 代理程式也會產生必要的遙測資訊:
- 在區域磁碟的存取記錄中新增項目,並提供要求的額外資訊。
- 使用 OpenCensus Envoy 追蹤功能產生追蹤記錄項目,並傳送至 Trace。
記錄代理程式會將這項資料匯出至 Cloud Logging API,以便在 Cloud Logging 介面中提供資料。
必要條件
完成設定步驟前,請確認已完成下列事項:
- 已啟用 Traffic Director API,並符合其他必要條件,如「準備透過 VM 和無 Proxy 工作負載進行設定」一文所述。
- 已啟用 Cloud Trace API。
- Compute Engine VM 使用的服務帳戶已設定下列身分與存取權管理 (IAM) 角色:
- Cloud Trace 代理程式角色
(
roles/cloudtrace.agent
) - 記錄寫入者角色
(
roles/logging.logWriter
)
- Cloud Trace 代理程式角色
(
- 防火牆規則可允許流量傳送至您在此設定中設定的 VM。
設定示範服務和 Cloud Service Mesh
本文使用多個殼層指令碼,執行設定示範服務所需的步驟。請查看指令碼,瞭解指令碼執行的具體步驟。
啟動 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 代管服務設定必要參數。啟動執行 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_PATH
和TRAFFICDIRECTOR_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 代理程式。不過,使用這個選項時,篩選和處理原始文字記錄項目會比較困難。
下載並安裝 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 記錄匯出為結構化文字檔案
-
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 代理程式」。
驗證設定
- 從 Sidecar Proxy VM 產生對示範服務的要求。
系統會建立新的本機記錄檔記錄。舉例來說,您可以執行
curl 10.10.10.10
。 - 前往 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"]
如果設定完成,但您沒有看到可用的追蹤或記錄項目,請確認下列事項:
- Compute Engine VM 的服務帳戶具備必要的 Trace 和 Logging IAM 權限,如先決條件所述。如要瞭解 Trace IAM 權限,請參閱「存取權控管」。如要瞭解 Logging 權限,請參閱存取權控管。
- 記錄:確認
/var/log/google-fluentd/google-fluentd.log
中沒有錯誤。 - 記錄:發出要求時,請確認本機存取記錄檔中是否顯示新項目。
後續步驟
- 如要瞭解相關資訊,請參閱「無 Proxy gRPC 應用程式的可觀測性」。
- 如需一般 Cloud Service Mesh 疑難排解資訊,請參閱「排解使用 Envoy 的部署作業問題」。