解決 Cloud Service Mesh 中的觀測能力和遙測問題
本節說明常見的 Cloud Service Mesh 問題,以及如何解決這些問題。如需其他協助,請參閱取得支援。
在 Cloud Service Mesh 追蹤記錄中,Envoy 代理程式會定期呼叫 Google Cloud Observability API,以便回報追蹤記錄資料。API 呼叫類型會決定其頻率:
- 記錄:每 10 秒一次
- 指標:每 1 分鐘一次
- 邊緣 (Context API/Topology 檢視畫面):每隔約 1 分鐘發布增量報表,每隔約 10 分鐘發布完整報表。
- 追蹤記錄:取決於您設定的取樣頻率 (通常為每 100 個要求中取樣一個)。
遙測資訊主頁會收集 Confluence 和 Google Cloud Observability 的資料,以便顯示各種以服務為重點的資訊主頁。
服務資訊主頁缺少服務
資訊主頁只會顯示 HTTP(S)/gRPC 服務。如果您的服務應列於清單中,請確認 Cloud Service Mesh 追蹤資料將其識別為 HTTP 服務。
如果服務仍未顯示,請確認叢集中是否有 Kubernetes 服務設定。
查看所有 Kubernetes 服務的清單:
kubectl get services --all-namespaces
查看特定命名空間中的 Kubernetes 服務清單:
kubectl get services -n YOUR_NAMESPACE
服務指標缺失或不正確
如果服務的服務資訊主頁中缺少或有錯誤的指標,請參閱以下各節,瞭解可能的解決方法。
確認補充 Proxy 是否存在且已正確插入
命名空間可能沒有自動注入的標籤,或是手動注入失敗。確認命名空間中的 Pod 至少有兩個容器,且其中一個容器是 istio-proxy 容器:
kubectl -n YOUR_NAMESPACE get pods
確認是否已設定遙測
使用 istio-system
命名空間中的 EnvoyFilters 設定遙測資料。如果沒有這項設定,Cloud Service Mesh 就不會將資料回報給 Google Cloud Observability。
確認 Google Cloud Observability 設定 (以及中繼資料交換設定) 是否存在:
kubectl -n istio-system get envoyfilter
預期的輸出內容如下所示:
NAME AGE metadata-exchange-1.4 13d metadata-exchange-1.5 13d stackdriver-filter-1.4 13d stackdriver-filter-1.5 13d ...
如要進一步確認 Google Cloud 可觀測性篩選器是否已正確設定,請從各個 Proxy 收集設定傾印,並查看是否有 Google Cloud 可觀測性篩選器:
kubectl exec YOUR_POD_NAME -n YOUR_NAMESPACE -c istio-proxy curl localhost:15000/config_dump
在先前指令的輸出內容中,找出 Google Cloud 觀測功能篩選器,如下所示:
"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
確認您已在Google Cloud 主控台的「API 和服務」資訊主頁中啟用 Cloud Monitoring 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
選單,確認是否有「Quotas」選項。你可以直接使用以下網址存取這個頁面:
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
設定正確
開啟 Metrics Explorer,然後執行下列 MQL 查詢:
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 資訊主頁就不會顯示指標。metric.mesh_uid
會在 Cloud Service Mesh 安裝在叢集時設定,因此請調查安裝方法,看看是否有方法將其設為預期值。
服務的遙測資料遺失或有誤
根據預設,安裝 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。
- 為了更新拓樸圖表,副車 Proxy 會大約每分鐘傳送增量報表,並大約每十分鐘傳送完整報表。
- 就記錄而言,附加元件 Proxy 會大約每十秒呼叫一次 Cloud Logging API。
- 如要進行追蹤,您必須啟用 Cloud Trace。系統會根據您設定的取樣頻率回報追蹤記錄 (通常是每 100 個要求中回報一個)。
在 Cloud Service Mesh 指標頁面上,系統只會顯示 HTTP 服務的指標。如果沒有任何指標,請確認應用程式服務命名空間中的所有 Pod 都已插入補充 Proxy:
kubectl get pod -n YOUR_NAMESPACE --all
請注意,在輸出結果中,READY
欄會顯示每個工作負載的兩個容器:主要容器和副車 Proxy 的容器。
此外,服務資訊主頁只會顯示伺服器指標,因此如果用戶端不在網格中,或是用戶端已設定為只回報用戶端指標 (例如入口網關),系統可能就不會顯示遙測資料。