排查监控信息中心问题


本页面介绍如何解决 Google Kubernetes Engine (GKE) 的监控信息中心相关问题。

默认情况下,系统会在您创建集群时启用 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.viewerroles/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 代理。如需检查该代理是否正常运行,请执行以下步骤:

  1. 通过运行以下命令检查代理是否正在重启:

    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
    
  2. 通过运行以下命令检查 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,
    
  3. 检查 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 的日志量。

如果要更改 Logging 代理调整参数,请参阅部署自定义 Logging 代理配置的社区教程。

如需详细了解如何调查和解决 GKE 日志记录相关问题,请参阅排查 GKE 中的日志记录问题

突发事件与 GKE 资源不匹配?

如果您的提醒政策条件用于汇总不同 GKE 资源的指标,您可能需要修改政策的条件来包含更多 GKE 层次结构标签,以将突发事件与特定实体相关联。

例如,您可能有两个 GKE 集群:一个用于生产,一个用于预演,并且每个集群都有自己的服务副本 lilbuddy-2。当提醒政策条件汇总这两个集群中的容器指标时,GKE Monitoring 信息中心无法将此突发事件唯一性地与生产服务或预演服务相关联。

如需解决此问题,请将 namespaceclusterlocation 添加到政策的分组依据字段,从而将提醒政策定位到特定服务。在提醒的事件卡片上,点击更新提醒政策链接以打开相关提醒政策的修改提醒政策页面。在这里,您可以使用其他信息更新提醒政策,以便信息中心能够找到关联的资源。

更新提醒政策后,GKE Monitoring 信息中心能够将未来的所有突发事件与特定集群中的唯一服务相关联,从而为您提供更多信息来诊断问题。

根据您的使用场景,除了将其中的某些标签添加到分组依据字段之外,您可能还需要过滤这些标签。例如,如果您仅需要生产集群的提醒,则可以过滤 cluster_name