收集 Cloud Service Mesh 日志

以下几个部分介绍了如何收集各种 Cloud Service Mesh 日志以排查问题或联系 Google 支持团队

使用 Bug 报告工具收集日志

Cloud Service Mesh 提供了一种自动化的 Bug 报告工具,用于收集相关诊断日志并允许您将日志附加到 Google 支持服务工单。

在开始之前,请确保集群的 kubeconfig 上下文位于 您的 kubeconfig 文件

开始收集日志

代管式控制平面

  1. 下载问题排查工具

  2. 运行 bug-report 工具以收集日志:

    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. 运行 bug-report 工具以收集日志:

    istioctl bug-report

上传您的调试归档文件

该工具会在工作目录中创建网格的日志和配置的归档文件。您可以解压缩归档文件并按照问题排查指南来尝试自行排查问题。但是,如果您有支持套餐,则可以与 Google Cloud 支持团队联系,他们将为您提供更多步骤来安全地上传日志归档文件。

手动收集 Cloud Service Mesh 日志

本部分介绍如何手动收集所有相关日志,而不是使用 Cloud Service Mesh Bug 报告工具。

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 代理访问日志并将其存储在文件夹中,请使用以下命令:

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

请参阅获取 Envoy 的访问日志

Kubernetes 日志

Kubernetes 会生成多项日志,其中包含 istiod 组件(例如 Istiod、Ingress Gateway 和代理)的行为信息。您可以查看这些日志中是否存在错误,从而可能缩小问题的潜在原因范围。

(仅限集群内控制平面)使用以下命令捕获 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 代理

详细的 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