本页面可帮助您解决 Google Kubernetes Engine (GKE) 监控信息中心的相关问题,例如信息中心未显示或数据不可用。如需详细了解如何使用这些信息中心排查集群和工作负载问题,请参阅 GKE 问题排查简介。
GKE 信息中心未在 Cloud Monitoring 中列出
默认情况下,系统会在您创建集群时启用 Monitoring。如果您在 Monitoring 中查看提供的 Google Cloud 信息中心时未看到 GKE 信息中心,表示系统没有为所选 Google Cloud 项目中的集群启用 Monitoring。请启用监控功能以查看这些信息中心。
我的信息中心中没有 Kubernetes 资源
如果您没有在 GKE 信息中心内看到 Kubernetes 资源,请检查以下内容:
所选的 Google Cloud 项目
验证您是否已从 Google Cloud 控制台菜单栏中的下拉列表中选择正确的 Google Cloud 项目,以便选择项目。您必须选择要查看其数据的项目。
集群活动
如果您刚刚创建集群,请稍等几分钟,以便其填充数据。如需了解详情,请参阅为 GKE 配置日志记录和监控。
时间范围
所选时间范围可能过窄。您可以使用信息中心工具栏中的时间菜单选择其他时间范围或定义自定义范围。
查看信息中心的权限
如果您在查看服务的部署详情或 Google Cloud 项目的指标时看到以下任一权限遭拒的错误消息,则需要更新 Identity and Access Management 角色,以包含 roles/monitoring.viewer 或 roles/viewer:
You do not have sufficient permissions to view this page
You don't have permissions to perform the action on the selected resources
如需了解详情,请转到预定义角色。
将数据写入 Monitoring 和 Logging 的集群和节点服务账号权限
如果您在 Google Cloud 控制台中的已启用的 API 和服务页面中看到较高的错误率,则您的服务账号可能缺少以下角色:
roles/logging.logWriter
:在 Google Cloud 控制台中,此角色名为 Logs Writer。如需详细了解 Logging 角色,请参阅 Logging 访问权限控制指南。roles/monitoring.metricWriter
:在 Google Cloud 控制台中,此角色名为 Monitoring Metric Writer。如需详细了解 Monitoring 角色,请参阅 Monitoring 访问权限控制指南。roles/stackdriver.resourceMetadata.writer
:在 Google Cloud 控制台中,此角色名为 Stackdriver Resource Metadata Writer。此角色允许对资源元数据进行只写访问,并且提供代理发送元数据所需的确切权限。如需详细了解 Monitoring 角色,请参阅 Monitoring 访问权限控制指南。
如需列出您的服务账号,请在 Google Cloud 控制台中前往 IAM 和管理,然后选择服务账号。
无法查看日志
如果您在信息中心内没有看到日志,请检查以下内容:
代理正在运行且监控状况良好
GKE 1.17 版及更高版本使用 Fluent Bit 来捕获日志。Fluent Bit 是在 Kubernetes 节点上运行的 Logging 代理。如需检查该代理是否正常运行,请执行以下步骤:
通过运行以下命令检查代理是否正在重启:
kubectl get pods -l k8s-app=fluentbit-gke -n kube-system
如果没有重启,则输出类似于以下内容:
NAME READY STATUS RESTARTS AGE fluentbit-gke-6zr6g 2/2 Running 0 44d fluentbit-gke-dzh9l 2/2 Running 0 44d
通过运行以下命令检查 Pod 状态条件:
JSONPATH='{range .items[*]};{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status},{end}{end};' \ && kubectl get pods -l k8s-app=fluentbit-gke -n kube-system -o jsonpath="$JSONPATH" | tr ";" "\n"
如果部署运行状况良好,则输出类似于以下内容:
fluentbit-gke-nj4qs:Initialized=True,Ready=True,ContainersReady=True,PodScheduled=True, fluentbit-gke-xtcvt:Initialized=True,Ready=True,ContainersReady=True,PodScheduled=True,
检查 Pod 状态,该状态可以帮助您通过运行以下命令来确定部署是否正常:
kubectl get daemonset -l k8s-app=fluentbit-gke -n kube-system
如果部署运行状况良好,则输出类似于以下内容:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE fluentbit-gke 2 2 2 2 2 kubernetes.io/os=linux 5d19h
在此示例输出中,所需状态与当前状态匹配。
如果这些情况下代理正在运行且运行状况良好,但您仍然没有看到所有日志,则代理可能过载并丢弃日志。
代理过载并丢弃日志
您看不到所有日志的一个可能原因是节点的日志量会造成代理负载过重。GKE 中的默认 Logging 代理配置会调整到每个节点每秒 100 kiB 的速率,如果日志量超过此限制,则代理可能会开始丢弃日志。
如需检测是否达到了此限制,请查找以下任何指标:
使用过滤条件
container_name=fluentbit-gke
查看kubernetes.io/container/cpu/core_usage_time
指标,以查看 Logging 代理的 CPU 使用率是接近 100% 还是达到 100%。查看依
metadata.system_labels.node_name
分组的logging.googleapis.com/byte_count
指标,以查看是否有任何节点达到每秒 100 kiB。
如果您看到以上任何一种情况,则可以通过向集群添加更多节点来减少节点的日志量。如果所有日志量都来自单个 pod,您需要减少该 pod 的日志量。
如需详细了解如何调查和解决 GKE 日志记录相关问题,请参阅排查 GKE 中的日志记录问题。
突发事件与 GKE 资源不匹配?
如果您的提醒政策条件用于汇总不同 GKE 资源的指标,您可能需要修改政策的条件来包含更多 GKE 层次结构标签,以将突发事件与特定实体相关联。
例如,您可能有两个 GKE 集群:一个用于生产,一个用于预演,并且每个集群都有自己的服务副本 lilbuddy-2
。当提醒政策条件汇总这两个集群中的容器指标时,GKE Monitoring 信息中心无法将此突发事件唯一性地与生产服务或预演服务相关联。
如需解决此问题,请将 namespace
、cluster
、location
添加到政策的分组依据字段,从而将提醒政策定位到特定服务。在提醒的事件卡片上,点击更新提醒政策链接以打开相关提醒政策的修改提醒政策页面。在这里,您可以使用其他信息更新提醒政策,以便信息中心能够找到关联的资源。
更新提醒政策后,GKE Monitoring 信息中心能够将未来的所有突发事件与特定集群中的唯一服务相关联,从而为您提供更多信息来诊断问题。
根据您的应用场景,除了将其中的某些标签添加到分组依据字段之外,您可能还需要过滤这些标签。例如,如果您仅需要生产集群的提醒,则可以过滤 cluster_name
。
后续步骤
如果您在文档中找不到问题的解决方案,请参阅获取支持以获取进一步的帮助,包括以下主题的建议:
- 请与 Cloud Customer Care 联系,以提交支持请求。
- 通过在 StackOverflow 上提问并使用
google-kubernetes-engine
标记搜索类似问题,从社区获得支持。您还可以加入#kubernetes-engine
Slack 频道,以获得更多社区支持。 - 使用公开问题跟踪器提交 bug 或功能请求。