配置指标收集


Google Kubernetes Engine (GKE) 可以轻松将指标发送到 Cloud Monitoring。进入 Cloud Monitoring 后,指标可以填充自定义信息中心,生成提醒,创建服务等级目标,也可以由第三方监控服务使用 Cloud Monitoring API 提取。

GKE 提供多个指标来源:

  • 系统指标:来自基本系统组件的指标,用于描述 CPU、内存和存储空间等低级别资源。
  • 借助 Google Cloud Managed Service per Prometheus,您可以使用 Prometheus 大规模监控工作负载并发出提醒,而无需手动管理和操作 Prometheus。
  • 可观测性指标软件包:

    • 控制平面指标:从某些控制平面组件(如 API 服务器和调度器)导出的指标。
    • Kube 状态指标:从 kube 状态服务导出的精选指标集,用于监控 Pod、Deployment 等 Kubernetes 对象的状态;如需查看完整集,请参阅使用 kube 状态指标

      Kube 状态软件包是一种托管解决方案。如果您需要更大的灵活性(例如,需要管理抓取间隔或抓取其他资源),则可以部署自己的开源 kube 状态指标服务实例。如需了解详情,请参阅适用于 Kube 状态指标的 Google Cloud Managed Service for Prometheus 导出器文档。

系统指标

创建集群后,GKE 默认会收集系统组件发出的某些指标。

您可以选择是否将指标从 GKE 集群发送到 Cloud Monitoring。如果您选择将指标发送到 Cloud Monitoring,则必须发送系统指标。

所有 GKE 系统指标都会注入到前缀为 kubernetes.io 的 Cloud Monitoring。

价格

Cloud Monitoring 不对 GKE 系统指标的提取收费。如需了解详情,请参阅 Cloud Monitoring 价格

配置系统指标收集

如需启用系统指标收集,请将 SYSTEM 值传递给 gcloud container clusters creategcloud container clusters update 命令的 --monitoring 标志。

如需停用系统指标收集,请对 --monitoring 标志使用 NONE 值。如果停用了系统指标收集,则 Google Cloud 控制台的可观测性标签页GKE 部分中不提供集群的 CPU 用量、内存用量和磁盘用量等基本信息。

对于 GKE Autopilot 集群,您无法停用系统指标收集。

如需详细了解 Cloud Monitoring 与 GKE 的集成,请参阅 GKE 的可观测性

如需使用 Terraform 配置系统指标收集,请参阅 google_container_cluster 的 Terraform 注册表中的 monitoring_config 块。如需了解有关将 Google Cloud 与 Terraform 搭配使用的一般信息,请参阅将 Terraform 与 Google Cloud 搭配使用

系统指标列表

系统指标包括来自 Kubernetes 的重要系统组件的指标。如需查看这些指标的列表,请参阅 GKE 系统指标

排查系统指标问题

如果 Cloud Monitoring 中的系统指标未按预期提供,您可以遵循以下步骤来排查问题。

确认指标代理具有足够的内存

在大多数情况下,默认向 GKE 指标代理分配的资源是足够的。但是,如果 DaemonSet 反复崩溃,您可以按照以下说明检查终止原因:

  1. 获取 GKE 指标代理 Pod 的名称:

    kubectl get pods -n kube-system -l component=gke-metrics-agent
    

    查找状态为 CrashLoopBackOff 的 Pod。

    输出类似于以下内容:

    NAME                    READY STATUS           RESTARTS AGE
    gke-metrics-agent-5857x 0/1   CrashLoopBackOff 6        12m
    
  2. 描述状态为 CrashLoopBackOff 的 Pod:

    kubectl describe pod POD_NAME -n kube-system
    

    POD_NAME 替换为上一步中 Pod 的名称。

    如果 Pod 的终止原因为 OOMKilled,则代理需要额外的内存。

    输出类似于以下内容:

      containerStatuses:
      ...
      lastState:
        terminated:
          ...
          exitCode: 1
          finishedAt: "2021-11-22T23:36:32Z"
          reason: OOMKilled
          startedAt: "2021-11-22T23:35:54Z"
    
  3. 向具有失败指标代理的节点添加节点标签。您可以使用永久性节点标签,也可以使用临时节点标签。 我们建议您额外添加 20 MB 的空间。如果代理不断崩溃,您可以再次运行此命令,注意将节点标签替换为请求更多内存的标签。

    如需使用永久性标签更新节点池,请运行以下命令:

    gcloud container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \
        --location=COMPUTE_LOCATION
    

    请替换以下内容:

    • NODEPOOL_NAME:节点池的名称。
    • CLUSTER_NAME:现有集群的名称。
    • ADDITIONAL_MEMORY_NODE_LABEL:其中一个额外内存节点标签;请使用以下任一项:
      • 添加 10 MB:cloud.google.com/gke-metrics-agent-scaling-level=10
      • 添加 20 MB:cloud.google.com/gke-metrics-agent-scaling-level=20
      • 添加 50 MB:cloud.google.com/gke-metrics-agent-scaling-level=50
      • 添加 100 MB:cloud.google.com/gke-metrics-agent-scaling-level=100
      • 添加 200 MB:cloud.google.com/gke-metrics-agent-scaling-level=200
      • 添加 500 MB:cloud.google.com/gke-metrics-agent-scaling-level=500
    • COMPUTE_LOCATION:集群的 Compute Engine 位置

    或者,您可以使用以下命令添加升级后仍然存在的临时节点标签:

    kubectl label node/NODE_NAME \
    ADDITIONAL_MEMORY_NODE_LABEL --overwrite
    

    替换以下内容:

    • NODE_NAME:受影响的指标代理的节点名称。
    • ADDITIONAL_MEMORY_NODE_LABEL:其中一个额外内存节点标签;请使用上述示例中的一个值。

软件包:控制平面指标

您可以配置 GKE 集群,以将 Kubernetes API 服务器、调度器和控制器管理器发出的某些指标发送到 Cloud Monitoring。

使用要求

要将 Kubernetes 控制平面组件发出的指标发送到 Cloud Monitoring,需要 GKE 控制平面 1.22.13 或更高版本,并且需要启用系统指标收集功能。

配置控制平面指标的收集

如需在现有 GKE 集群中启用 Kubernetes 控制平面指标,请按以下步骤操作:

控制台

您可以通过集群的可观测性标签页或集群的详细信息标签页为集群启用控制平面指标。使用可观测性标签页时,您可以在启用指标软件包之前预览可用的图表和指标。

如需从集群的可观测性标签页启用控制平面指标,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Kubernetes Engine,然后选择集群

    前往 Kubernetes 集群

  2. 点击集群的名称,然后选择可观测性标签页。

  3. 从功能列表中选择控制平面

  4. 点击启用软件包

    如果控制平面指标已经启用,您则会看到一组控制平面指标的图表。

如需从集群的详细信息标签页启用控制平面指标,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Kubernetes Engine,然后选择集群

    前往 Kubernetes 集群

  2. 点击您的集群名称。

  3. 在标有 Cloud Monitoring功能行中,点击修改图标。

  4. 在出现的修改 Cloud Monitoring对话框中,确认选中启用 Cloud Monitoring

  5. 组件下拉菜单中,选择要从中收集指标的控制平面组件:API 服务器调度器控制器管理器

  6. 点击 OK(确定)。

  7. 点击保存更改

gcloud

  1. 打开一个安装了 Google Cloud SDK 和 Google Cloud CLI 的终端窗口。 一种方法是使用 Cloud Shell。

  2. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  3. 将一个或多个值 API_SERVERSCHEDULERCONTROLLER_MANAGER 传递给 gcloud container clusters creategcloud container clusters update 命令的 --monitoring 标志。

    例如,要从 API 服务器、调度器和控制器管理器收集指标,请运行以下命令:

    gcloud container clusters update CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --monitoring=SYSTEM,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

Terraform

如需使用 Terraform 配置 Kubernetes 控制平面指标的集合,请参阅 google_container_cluster 的 Terraform 注册表中的 monitoring_config 块。如需了解有关将 Google Cloud 与 Terraform 搭配使用的一般信息,请参阅将 Terraform 与 Google Cloud 搭配使用

使用控制平面指标

请参阅使用控制平面指标,了解以下内容:

用于直观呈现 Google Cloud 控制台中的 GKE 可观测性标签页上的控制平面指标的信息中心。如需了解这些信息中心,请参阅查看可观测性指标

软件包:Kube 状态指标

您可以配置 GKE 集群,以将一组精选的 Prometheus kube 状态指标发送到 Cloud Monitoring。此 kube 状态指标集合包括 Pod、Deployment、StatefulSet、DaemonSet、HorizontalPodAutoscaler 资源、永久性卷和永久性卷声明的指标。

对于从 1.29.2-gke.2000 版开始的 GKE Standard 集群以及从 1.27.4-gke.900 版开始的 GKE Autopilot 集群,Kube 状态指标数据包默认处于启用状态。

使用要求

如需收集 kube 状态指标,GKE 集群必须满足以下要求:

您可以在启用 kube 状态指标软件包的同时启用系统指标和 Google Cloud Managed Service for Prometheus。默认情况下,新集群上会启用 Google Cloud Managed Service for Prometheus 代管式收集。

配置 kube 状态指标的收集

如需在现有 GKE 集群中启用 kube 状态指标,请按照以下步骤操作:

控制台

您可以从集群或集群中的 Deployment 的可观测性标签页启用 kube 状态指标。您还可以在启用指标软件包之前预览可用的图表和指标。

在集群的可观测性标签页上,kube 状态指标的图表集在过滤条件菜单中划分为两个项:

  • 工作负载状态:包括 Pod、Deployment、StatefulSet、DaemonSet 和 HorizontalPodAutoscaler 资源的指标。
  • 存储 > 永久性:包括永久性卷和永久性卷声明的指标。

您可以启用一组或全部指标。

如需从集群的可观测性标签页启用 kube 状态指标,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Kubernetes Engine,然后选择集群

    前往 Kubernetes 集群

  2. 点击集群的名称,然后选择可观测性标签页。

  3. 从功能列表中选择工作负载状态存储 > 永久性

  4. 点击启用软件包

    如果 kube 状态指标软件包已启用,则您会看到一组 kube 状态指标图表。

如需从 Deployment 的可观测性标签页启用 kube 状态指标,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Kubernetes Engine,然后选择工作负载

    前往 Kubernetes 工作负载

  2. 点击 Deployment 的名称,然后选择可观测性标签页。

  3. 从功能列表中选择 Kube 状态

  4. 点击启用软件包。 该软件包针对整个集群启用。

    如果 kube 状态指标软件包已启用,则您会看到一组来自 Pod、Deployment 和 Pod 横向自动扩缩器的指标图表。

如需从集群的详细信息标签页配置 kube 状态指标,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Kubernetes Engine,然后选择集群

    前往 Kubernetes 集群

  2. 点击您的集群名称。

  3. 在标有 Cloud Monitoring功能行中,点击修改图标。

  4. 在出现的修改 Cloud Monitoring对话框中,确认选中启用 Cloud Monitoring

  5. 组件下拉菜单中,选择要从中收集指标的 kube 状态组件:

    • 永久性卷(存储空间)
    • Pod
    • 部署
    • StatefulSet
    • DaemonSet
    • Pod 横向自动扩缩器
  6. 点击 OK(确定)。

  7. 点击保存更改

gcloud

  1. 打开一个安装了 Google Cloud SDK 和 Google Cloud CLI 的终端窗口。 一种方法是使用 Cloud Shell。

  2. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  3. 将以下一个或多个值传递给 gcloud container clusters creategcloud container clusters update 命令的 --monitoring 标志:

    • DAEMONSET
    • DEPLOYMENT
    • HPA
    • POD
    • STATEFULSET
    • STORAGE - 此选项包括永久性卷和永久性卷声明的指标

    例如,如需收集现有集群中 Deployment 和 Pod 的指标,请运行以下命令:

    gcloud container clusters update CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --enable-managed-prometheus
        --monitoring=SYSTEM,DEPLOYMENT,POD
    

    提供给 --monitoring 标志的一组值会替换之前的任何设置。在上面的示例中,如果集群先前配置为收集 DAEMONSET 指标,则示例命令会关闭这些指标的收集功能。

Terraform

如需使用 Terraform 配置 kube 状态指标的集合,请参阅 google_container_cluster 的 Terraform 注册表中的 monitoring_config 块。如需了解有关将 Google Cloud 与 Terraform 搭配使用的一般信息,请参阅将 Terraform 与 Google Cloud 搭配使用

使用 Kube State Metrics

请参阅使用 kube 状态指标,了解以下内容:

  • 有关查询 Kubernetes 状态指标的信息。
  • kube 状态指标表。

Google Cloud 控制台中的 GKE 可观测性标签页上提供了用于直观呈现 kube 状态指标的信息中心。如需了解这些信息中心,请参阅查看可观测性指标

软件包:cAdvisor/Kubelet 指标

您可以配置 GKE 集群,以将一组精选的 Prometheus cAdvisor/Kubelet 指标发送到 Cloud Monitoring。精选指标集是默认内置于每个 Kubernetes 部署中的大量 cAdvisor/Kubelet 指标的子集。精选的 cAdvisor/Kubelet 旨在提供最有用的指标,从而减少注入量和相关费用。

使用要求

如需收集 cAdvisor/Kubelet 指标,GKE 集群必须满足以下要求:

对于新集群,Google Cloud Managed Service for Prometheus 托管式收集功能默认处于启用状态,并且默认针对以下各项启用 cAdvisor/Kubelet 指标软件包:

  • 从 1.29.3-gke.1093000 版开始的 GKE Autopilot 集群。
  • 从 1.29.3-gke.1093000 版开始的 GKE Standard 集群。

对于现有集群,您可以在启用 cAdvisor/Kubelet 指标数据包的同时启用系统指标和 Google Cloud Managed Service for Prometheus。

配置 cAdvisor/Kubelet 指标收集

如需在现有 GKE 集群中启用 cAdvisor/Kubelet 指标,请按以下步骤操作:

gcloud

  1. 打开一个安装了 Google Cloud SDK 和 Google Cloud CLI 的终端窗口。 一种方法是使用 Cloud Shell。

  2. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  3. 将以下一个或多个值传递给 gcloud container clusters creategcloud container clusters update 命令的 --monitoring 标志:

    • CADVISOR
    • KUBELET

    例如,如需仅收集现有集群中的 cAdvisor/Kubelet 指标,请运行以下命令:

    gcloud container clusters update CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --enable-managed-prometheus \
        --monitoring=SYSTEM,CADVISOR,KUBELET
    

    提供给 --monitoring 标志的一组值会替换之前的任何设置。在前面的示例中,如果集群之前已配置为从 kube 状态数据包收集 DAEMONSET 指标,则示例命令会关闭这些指标的收集。

Terraform

如需使用 Terraform 配置 cAdvisor/Kubelet 指标的收集,请参阅 google_container_cluster 的 Terraform 注册表中的 monitoring_config 块。如需了解有关将 Google Cloud 与 Terraform 搭配使用的一般信息,请参阅将 Terraform 与 Google Cloud 搭配使用

使用 cAdvisor/Kubelet 指标

如需了解以下内容,请参阅使用 cAdvisor/Kubelet 指标

  • 有关查询 cAdvisor/Kubelet 指标的信息。
  • cAdvisor/Kubelet 指标表。

可观测性软件包的价格和配额

此部分中的信息适用于以下可观测性软件包:

GKE 控制平面指标和 kube 状态指标使用 Google Cloud Managed Service for Prometheus 将指标加载到 Cloud Monitoring 中。Cloud Monitoring 会根据注入的样本数量收取这些指标的注入费用。但是,对于属于已启用 GKE Enterprise 版本的项目的已注册集群,这些指标是免费的。

如需了解详情,请参阅 Cloud Monitoring 价格

了解 Monitoring 账单

您可以使用 Cloud Monitoring 来标识写入最多样本的控制平面或 kube 状态指标。这些指标对费用的影响最大。在确定费用最高的指标后,您可以修改抓取配置以适当过滤这些指标。

Cloud Monitoring 指标管理页面提供的信息可帮助您控制在收费指标上支出的金额,而不会影响可观测性。指标管理页面报告以下信息:

  • 针对指标网域中基于字节和基于样本的结算以及各个指标的注入量。
  • 有关指标的标签和基数的数据。
  • 指标在提醒政策和自定义信息中心内的使用。
  • 指标写入错误率。

如需查看指标管理页面,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Monitoring,然后选择  指标管理

    前往指标管理

  2. 在工具栏中,选择时间窗口。默认情况下,指标管理页面会显示有关前一天收集的指标的信息。

如需详细了解指标管理页面,请参阅查看和管理指标使用情况

如需确定哪些控制平面或 kube 状态指标注入的样本最多,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Monitoring,然后选择  指标管理

    前往指标管理

  2. 注入的计费样本数统计信息摘要图表上,点击查看图表

  3. 找到命名空间卷注入图表,然后点击  更多图表选项

  4. 指标字段中,验证是否已选择以下资源和指标:
    Metric Ingestion AttributionSamples written by attribution id

  5. 过滤条件页面中,执行以下操作:

    1. 标签字段中,验证值为 attribution_dimension

    2. 比较字段中,验证值为 = (equals)

    3. 字段中,选择 cluster

  6. 清除分组依据设置。

  7. (可选)仅过滤某些指标。例如,控制平面 API 服务器指标名称中都包含“apiserver”,并且 kube 状态 Pod 指标名称中都包含“kube_pod”,因此您可以过滤包含这些字符串的指标:

    • 点击添加过滤条件

    • 标签字段中,选择 metric_type

    • 比较字段中,选择 =~ (equals regex)

    • 字段中,输入 .*apiserver.*.*kube_pod.*

  8. (可选)对按 GKE 区域或项目注入的样本数量进行分组:

    • 点击分组依据

    • 确保已选择 metric_type

    • 要按 GKE 区域分组,请选择位置

    • 要按项目分组,请选择 project_id

    • 点击 OK(确定)。

  9. (可选)对按 GKE 集群名称注入的样本数量进行分组:

    • 点击分组依据

    • 要按 GKE 集群名称分组,请确保同时选择 attribution_dimensionattribution_id

    • 点击 OK(确定)。

  10. 如需查看每个指标的注入量,请在标有图表/表/两者的切换开关中,选择两者。该表显示了列中每个指标的注入量。

    点击列标题两次,以按注入量降序对指标排序。

这些步骤显示了注入到 Cloud Monitoring 中的样本比率最高的指标。由于可观测性软件包中的指标按注入的样本数量收费,因此请注意注入样本比率最高的指标。

配额

控制平面指标和 kube 状态指标使用 Cloud Monitoring API 的“每分钟的时序注入请求数”配额。在启用指标软件包之前,请检查该配额的最近峰值用量。如果您在同一项目中有多个集群,或者已经达到该配额上限,则可以申请增加配额,然后才能启用任一可观测性软件包。

其他指标

除了本文档中介绍的系统指标和指标软件包之外,Istio 指标也适用于 GKE 集群。如需了解价格,请参阅 Cloud Monitoring 价格