解決 Cloud Service Mesh 中的觀測能力和遙測問題
本節說明 Cloud Service Mesh 的常見問題,以及如何解決這些問題。如需其他協助,請參閱「取得支援」。
在 Cloud Service Mesh 遙測中,Envoy Proxy 會定期呼叫 Google Cloud Observability API,回報遙測資料。API 呼叫的類型會決定呼叫頻率:
- 記錄:每 10 秒一次
- 指標:每隔約 1 分鐘
- 邊緣 (Context API/拓撲檢視畫面):每隔約 1 分鐘產生增量報表,每隔約 10 分鐘產生完整報表。
- 追蹤記錄:取決於您設定的取樣頻率 (通常每 100 個要求中會取樣 1 個)。
遙測資訊主頁會從 Confluence 和 Google Cloud Observability 收集資料,並顯示各種以服務為主的資訊主頁。
確認最多只有一個 Istio 遙測 API 設定
本節僅適用於受管理的 Traffic Director 控制層。
如要列出遙測 API 設定,請執行下列指令。確認最多只有一個 Istio Telemetry API 設定。
kubectl -n istio-system get telemetry
服務資訊主頁缺少服務
資訊主頁只會顯示 HTTP(S)/gRPC 服務。如果服務應顯示在清單中,請確認 Cloud Service Mesh 遙測功能是否將其識別為 HTTP 服務。
如果服務仍未顯示,請確認叢集中是否有 Kubernetes 服務設定。
查看所有 Kubernetes 服務的清單:
kubectl get services --all-namespaces
查看特定命名空間中的 Kubernetes 服務清單:
kubectl get services -n YOUR_NAMESPACE
服務的指標遺失或不正確
如果「服務」資訊主頁中缺少服務指標或指標有誤,請參閱下列各節,瞭解可能的解決方法。
確認 Sidecar Proxy 存在且已正確插入
命名空間可能沒有自動插入的標籤,或手動插入失敗。確認命名空間中的 Pod 至少有兩個容器,其中一個是 istio-proxy 容器:
kubectl -n YOUR_NAMESPACE get pods
確認遙測設定是否存在
如要確認 Google Cloud Observability 篩選器已設定完成,請從每個 Proxy 收集設定傾印,並尋找 Google Cloud Observability 篩選器:
kubectl debug --image istio/base --target istio-proxy -it YOUR_POD_NAME -n YOUR_NAMESPACE curl localhost:15000/config_dump
在先前指令的輸出內容中,尋找 Google Cloud Observability 篩選器,如下所示:
"config": {
"root_id": "stackdriver_inbound",
"vm_config": {
"vm_id": "stackdriver_inbound",
"runtime": "envoy.wasm.runtime.null",
"code": {
"local": {
"inline_string": "envoy.wasm.null.stackdriver"
}
}
},
"configuration": "{....}"
}確認 Cloud Service Mesh 是否識別出 HTTP 服務
如果 Kubernetes 服務的服務通訊埠不是命名為 http,或任何以 http- 為前置字元的名稱,使用者介面就不會顯示指標。確認服務的通訊埠名稱正確無誤。
確認專案已啟用 Cloud Monitoring API
確認 Cloud Monitoring API 已在Google Cloud 控制台的「API 和服務」資訊主頁中啟用 (預設為啟用)。
確認沒有錯誤回報給 Cloud Monitoring API
在 Google Cloud 控制台的「API 和服務」資訊主頁中,開啟「依回應代碼劃分的流量」圖表網址:
https://console.cloud.google.com/apis/api/monitoring.googleapis.com/metrics?folder=&organizationId=&project=YOUR_PROJECT_ID
如果看到錯誤訊息,可能表示有問題需要進一步調查。特別是大量 429 錯誤訊息,這表示可能發生配額問題。如需疑難排解步驟,請參閱下一節。
確認 Cloud Monitoring API 的配額是否正確
在 Google Cloud 控制台中開啟 IAM & Admin 選單,確認是否有「配額」選項。你可以使用下列網址直接存取這個頁面:
https://console.cloud.google.com/iam-admin/quotas?project=YOUR_PROJECT_ID
這個頁面會顯示專案的完整配額,您可以在這裡搜尋 Cloud Monitoring API。
確認 Envoy Proxy 中沒有錯誤記錄
查看有問題的 Proxy 記錄,搜尋錯誤訊息例項:
kubectl -n YOUR_NAMESPACE logs YOUR_POD_NAME -c istio-proxy
不過,請忽略下列警告訊息,這些訊息屬於正常現象:
[warning][filter] [src/envoy/http/authn/http_filter_factory.cc:83] mTLS PERMISSIVE mode is used, connection can be either plaintext or TLS, and client cert can be omitted. Please consider to upgrade to mTLS STRICT mode for more secure configuration that only allows TLS connection with client cert. See https://istio.io/docs/tasks/security/mtls-migration/ [warning][config] [bazel-out/k8-opt/bin/external/envoy/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:91] gRPC config stream closed: 13
確認 metric.mesh_uid 設定正確無誤
fetch istio_canonical_service
| metric 'istio.io/service/server/request_count'
| align delta(1m)
| every 1m
| group_by [metric.destination_canonical_service_namespace, metric.destination_canonical_service_name, metric.mesh_uid]
確認所有預期服務都會回報指標,且 metric.mesh_uid 的格式為 proj-<Cloud Service Mesh fleet project number>。
如果 metric.mesh_uid 具有任何其他值,Cloud Service Mesh 資訊主頁就不會顯示指標。在叢集上安裝 Cloud Service Mesh 時,系統會設定 metric.mesh_uid,因此請調查安裝方法,看看是否能將其設為預期值。
服務的遙測資料缺漏或有誤
根據預設,安裝 Cloud Service Mesh 時,系統會在Google Cloud 專案中啟用 Cloud Monitoring 和 Cloud Logging。如要回報遙測資料,插入服務 Pod 的每個補充 Proxy 都會呼叫 Cloud Monitoring API 和 Cloud Logging API。部署工作負載後,遙測資料大約需要一到兩分鐘才會顯示在Google Cloud 控制台中。Cloud Service Mesh 會自動更新服務資訊主頁:
- 就指標而言,隨附容器 Proxy 大約每分鐘會呼叫一次 Cloud Monitoring API。
- 如要更新拓撲圖,附屬應用程式代理伺服器大約每分鐘會傳送增量報告,每十分鐘則會傳送完整報告。
- 就記錄功能而言,約每十秒,附屬資訊車代理程式就會呼叫 Cloud Logging API。
- 如要追蹤,請啟用 Cloud Trace。系統會根據您設定的取樣頻率回報追蹤記錄 (通常每 100 個要求會回報一個)。
Cloud Service Mesh「Metrics」頁面只會顯示 HTTP 服務的指標。如果沒有看到任何指標,請確認應用程式服務的命名空間中,所有 Pod 都已注入 Sidecar Proxy:
kubectl get pod -n YOUR_NAMESPACE --all
在輸出內容中,請注意 READY 欄會顯示每個工作負載的兩個容器:主要容器和 Sidecar Proxy 的容器。
此外,「服務」資訊主頁只會顯示伺服器指標,因此如果用戶端不在網格中,或設定為只回報用戶端指標 (例如 Ingress 閘道),遙測資料可能不會顯示。