收集 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 代理存取記錄,請為叢集內的 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 閘道和 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. sidecar.istio.io/enableCoreDump=true 標籤新增至 Pod。

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

  3. 將核心轉儲複製到 Pod 外。

設定 Envoy Proxy

詳細的 Envoy 代理程式設定包含其他詳細資料,可能有助於排解問題。您可以使用下列指令收集這項資訊。在本範例中,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