收集 Cloud Service Mesh 記錄

以下各節說明如何收集各種 Cloud Service Mesh 記錄,以排解問題或聯絡 Google 支援團隊

使用錯誤報告工具收集記錄檔

Cloud Service Mesh 提供自動錯誤報告工具,可收集相關診斷記錄,並將記錄附加至 Google 支援單。

開始之前,請確認叢集的 kubeconfig 環境已在 kubeconfig 檔案中提供。

開始收集記錄

代管控制層

  1. 下載疑難排解工具

  2. 執行錯誤報告工具來收集記錄:

    gcloud beta container fleet mesh debug bug-report \
       --membership=MEMBERSHIP_NAME \
       --location=MEMBERSHIP_LOCATION \
       --project=PROJECT_NAME
    

    更改下列內容:

    • MEMBERSHIP_NAME:會員方案名稱。
    • MEMBERSHIP_LOCATION:會員方案的適用區域。
    • PROJECT_NAME:專案名稱。

叢集內控制層

  1. 下載疑難排解工具

  2. 執行錯誤報告工具來收集記錄:

    istioctl bug-report

上傳偵錯封存檔

這項工具會在工作目錄中建立網格記錄和設定的封存檔。您可以解壓縮封存檔,並使用疑難排解指南嘗試自行排解問題。不過,如果您有支援方案,可以與 Google Cloud 支援團隊聯絡,他們會提供進一步步驟,協助您安全地上傳記錄檔封存檔。

手動收集 Cloud Service Mesh 記錄

本節說明如何手動收集所有相關記錄,而不使用 Cloud Service Mesh 錯誤報告工具。

Envoy 存取記錄

Envoy 代理程式存取記錄包含有助於排解問題的詳細資訊。不過,您必須啟用這些功能並設定正確的詳細程度。

如要瞭解如何解讀記錄內容,請參閱「解讀 Envoy 記錄」。

啟用或停用 Envoy 記錄

如要啟用 Envoy Proxy 存取記錄,請為叢集內 Cloud Service Mesh 設定疊加檔案,或為代管型 Cloud Service Mesh 設定 ConfigMap

提高記錄詳細程度

如要暫時提高記錄的詳細程度,請使用下列指令。 重新建立 Pod 時,這項設定會復原。

kubectl -n NAMESPACE debug --image istio/base --target istio-proxy -it POD_NAME -- curl -X POST http://localhost:15000/logging?level=debug

如要將記錄詳細程度設回預設值,請使用下列指令:

kubectl -n NAMESPACE debug --image istio/base --target istio-proxy -it POD_NAME -- curl -X POST http://localhost:15000/logging?level=info

將 Envoy 記錄寫入資料夾

如要收集 Envoy Proxy 存取記錄並儲存至資料夾,請使用下列指令:

kubectl logs -l app=APPLICATION_NAME -c istio-proxy > /FILE_PATH

詳情請參閱「取得 Envoy 的存取記錄」。

Kubernetes 記錄檔

Kubernetes 會產生多個記錄檔,其中包含 Istio 元件 (例如 istiod、Ingress Gateway 和 Proxy) 的行為資訊。您可以查看這些記錄檔是否有錯誤,藉此縮小問題可能原因的範圍。

(僅限叢集內控制層) 使用下列指令擷取 istiod 記錄:

kubectl -n istio-system logs $(kubectl -n istio-system get pods -lapp=istiod -oname) > ./LOGS_FOLDER/istiod.log

(僅限叢內控制層) 使用下列指令擷取 Istio Ingress Gateway 記錄:

kubectl -n istio-system logs $(kubectl -n istio-system get pods -lapp=istio-ingressgateway -oname) > /FILE_PATH

使用下列指令擷取 Istio Proxy 記錄:

kubectl -n WORKLOAD_NAMESPACE logs POD_NAME -c istio-proxy > ./LOGS_FOLDER/proxy.log

Kubernetes 設定傾印

這樣一來,即使使用者無法直接存取叢集,也能查看各種資源的狀態,並找出可能的設定問題。下列指令會將 Kubernetes 設定寫入 YAML 檔案:

for ns in `kubectl get namespaces -o=jsonpath='{.items[*].metadata.name}'` ; do echo "===NAMESPACE===" $ns >> ./LOGS_FOLDER/kubernetes.yaml ;kubectl get -oyaml -n $ns deploy,statefulset,job,ingress,endpoints,configmap,event,secret,service,istio-io >> ./LOGS_FOLDER/kubernetes.yaml; done

Envoy 核心傾印

Envoy 核心傾印通常對使用者沒有幫助,但 Google 支援可能會要求您按照下列步驟收集這類傾印,以利進行疑難排解。

如要設定核心,將 Envoy 核心傾印寫入可寫入的目錄,請按照下列步驟操作:

  1. 為 Pod 新增 sidecar.istio.io/enableCoreDump=true 標籤。

  2. 重新啟動 Pod,啟用 Envoy 核心傾印。

  3. 將核心傾印從 Pod 複製出來。

設定 Envoy Proxy

詳細的 Envoy Proxy 設定包含其他詳細資料,可能有助於排解問題。您可以使用下列指令收集這項資訊。在本範例中,ENDPOINT 是下列其中一個值 (依重要性排序):

  • /certs
  • /clusters
  • /listeners
  • /config_dump
  • /memory
  • /server_info
  • /stats/prometheus
  • /runtime
kubectl debug --image istio/base --target istio-proxy -itq POD_NAME -n NAMESPACE -- curl 127.0.0.1:15000/ENDPOINT > out.log