收集 Cloud Service Mesh 日志
以下几个部分介绍了如何收集各种 Cloud Service Mesh 日志以排查问题或联系 Google 支持团队。
使用 Bug 报告工具收集日志
Cloud Service Mesh 提供了一种自动化的 Bug 报告工具,用于收集相关诊断日志并允许您将日志附加到 Google 支持服务工单。
在开始之前,请确保您的 kubeconfig 文件中包含集群的 kubeconfig 上下文。
开始收集日志
代管式控制平面
运行 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
:项目名称。
集群内控制平面
运行 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 核心转储文件写入可写目录,请执行以下操作:
向 Pod 添加
sidecar.istio.io/enableCoreDump=true
标签。重启 Pod 以启用 Envoy 核心转储文件。
从 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