本文档介绍了操作员如何配置 Google Cloud Managed Service for Prometheus,以从 Google Kubernetes Engine (GKE) 集群和工作负载中过滤和收集特定 Kubernetes 指标。
您应该已经熟悉以下内容:
GKE 中的指标收集
GKE 集群中的系统组件会发出并公开 Prometheus 指标。默认情况下,所有集群都会注入特定于 GKE 的系统指标。此外,您还可以使用内置的指标软件包来注入各种组件的精选指标集合。
除了内置的 GKE 指标包之外,您还可以手动配置 Google Cloud Managed Service for Prometheus,以注入特定的 Prometheus 指标。此自定义配置非常适合以下使用场景:
- 监控集群和工作负载中的特定信号。
- 通过停用不需要的指标包并仅注入一部分指标来优化费用。
- 收集由组件发出但不包含在指标软件包中的指标。
对于运维人员,每个节点上由 kubelet 进程发出的节点指标可能有助于监控工作负载和节点以获取特定信号。
指标收集自定义资源
如需过滤和注入特定指标,请在以下自定义资源之一中配置 Prometheus 重贴标签规则:
PodMonitoring:配置从特定命名空间中的 Pod 收集指标。ClusterPodMonitoring:配置从任何命名空间中的 Pod 收集指标。ClusterNodeMonitoring:配置从节点组件(如kubelet和 cAdvisor)收集指标。
指标重复
如果您过滤的指标也包含在集群的有效指标软件包中,则该指标会在 Google Cloud Managed Service for Prometheus 中多次显示。例如,如果您的集群启用了 KUBELET 指标软件包,并且您配置了 kubelet_running_containers 指标的收集,那么您会看到重复的值。
为避免重复,请验证您收集的指标是否未包含在任何有效的指标软件包中。如需详细了解所含的指标,请参阅以下指标软件包:
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 验证您是否拥有本文档所需的权限。
- 使用现有 GKE 集群或创建新集群。
所需的角色
如需获得收集和查看指标所需的权限,请让管理员为您授予项目的以下 IAM 角色:
-
在集群中创建 Kubernetes 资源:Kubernetes Engine Developer (
roles/container.developer) -
在 Monitoring 中查看指标:Monitoring Viewer (
roles/monitoring.viewer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
启用 Google Cloud Managed Service for Prometheus
默认情况下,所有 GKE 集群都会启用 Google Cloud Managed Service for Prometheus,并且无法在 Autopilot 集群中停用。如果您使用的是 Autopilot 集群,请跳至配置指标收集部分。
如需验证 Google Cloud Managed Service for Prometheus 是否已在标准集群中启用,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 Kubernetes 集群页面。
在要检查的集群所在的行中,依次点击 操作 > 修改。系统会打开集群详情页面。
在功能部分中,检查 Managed Service for Prometheus 字段中的值。如果值为已启用,请跳至配置指标收集部分。如果该值为 Disabled,请启用 Google Cloud Managed Service for Prometheus:
- 点击 修改 Managed Service for Prometheus。系统会打开修改 Managed Service for Prometheus 对话框。
- 选中启用 Managed Service for Prometheus 复选框。
- 点击保存更改。
gcloud
检查集群中是否已启用 Google Cloud Managed Service for Prometheus:
gcloud container clusters describe CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--format='value(monitoringConfig.managedPrometheusConfig.enabled)'
替换以下内容:
CLUSTER_NAME:Standard 集群的名称。CONTROL_PLANE_LOCATION:集群控制平面所在的区域或可用区,例如us-central1或us-central1-a。
如果输出为 True,则表示 Google Cloud Managed Service for Prometheus 已启用。
如果输出为 False,请启用 Google Cloud Managed Service for Prometheus:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-managed-prometheus
配置指标收集
如需将 Google Cloud Managed Service for Prometheus 配置为注入特定发出的指标,您需要了解该指标的以下信息:
- 指标名称,例如
kubelet_working_pods。 - 公开指标的端点,例如
/metrics/cadvisor或/metrics。
如需查找指标并配置收集,请按以下步骤操作:
在特定组件的参考文档中查找指标。例如,您可以使用以下资源查找节点指标:
检查集群的有效指标数据包:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --flatten=monitoringConfig.componentConfig \ --format='value(enableComponents)'输出类似于以下内容:
SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM使用可用指标中的信息,检查您要收集的指标是否位于这些有效软件包中。如果您的指标包含在有效的指标软件包中,监控中可能会显示重复的指标。如果您的指标不在有效指标软件包中,请继续执行下一步。
可选:如需验证指标是否可在指标端点处获取,请使用
kubectl get --raw命令查询该端点。例如,以下命令会查询/metrics端点以获取kubelet_working_pods指标:kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"将
NODE_NAME替换为要查询的节点的名称。输出类似于以下内容,表示该指标可用:
# HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible. # TYPE kubelet_working_pods gauge kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8 kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1 kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0确定要收集的指标后,在 PodMonitoring、ClusterPodMonitoring 或 ClusterNodeMonitoring 自定义资源中使用 Prometheus 重贴标签规则来过滤该指标。您使用的自定义资源取决于指标的属性,如指标收集自定义资源部分中所述。
例如,请查看以下 ClusterNodeMonitoring 清单:
apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-pod-counts spec: selector: matchLabels: {} endpoints: - path: "/metrics" scheme: "https" interval: "30s" tls: insecureSkipVerify: true # metricRelabeling specifies the metrics to ingest. The metrics must be # available at the specified endpoint. metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_(active|working)_pods此清单具有以下属性:
selector.matchLabels字段是一个空集 ({}),可匹配所有节点。endpoints.path字段标识要抓取的指标端点。metricRelabeling字段标识要收集的特定指标。在此示例中,Google Cloud Managed Service for Prometheus 会从端点收集名称为kubelet_active_pods和kubelet_working_pods的指标。
部署自定义资源后,Google Cloud Managed Service for Prometheus 会注入与您指定的配置相匹配的指标。您可以使用与其他指标(例如 Cloud Monitoring)相同的方法来查看和查询这些指标。
验证示例指标的指标收集
以下步骤展示了如何配置 Google Cloud Managed Service for Prometheus,以从 kubelet 中收集 kubelet_runtime_operations_errors_total 指标。在这些示例步骤中,您将验证当前是否未收集该指标,创建 ClusterNodeMonitoring(因为 kubelet 是节点组件),然后验证该指标是否显示在 Monitoring 中。
验证
kubelet_runtime_operations_errors_total指标尚未在 Monitoring 中:在 Google Cloud 控制台中,前往 Metrics Explorer 页面。
在查询部分的指标字段中,尝试选择
prometheus/kubelet_runtime_operations_errors_total/counter指标。如果您没有看到搜索结果,则表示系统未收集相应指标。
创建 ClusterNodeMonitoring 以过滤
kubelet_runtime_operations_errors_total指标:将以下 ClusterNodeMonitoring 清单保存为
kubelet-runtime-errors-collector.yaml:apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-runtime-errors-collector spec: selector: matchLabels: {} endpoints: - path: /metrics scheme: https interval: 30s tls: insecureSkipVerify: true metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_runtime_operations_errors_total创建 ClusterNodeMonitoring:
kubectl apply -f kubelet-runtime-errors-collector.yaml
该指标最多可能需要 10 分钟才会显示在 Monitoring 中。
在 Google Cloud 控制台中,验证该指标是否显示在 Monitoring 中:
前往 Metrics Explorer 页面。
在查询部分的指标字段中,选择
prometheus/kubelet_runtime_operations_errors_total/counter指标。可选:在过滤条件下拉菜单中,选择您的集群。
结果部分会显示包含所收集指标的图表。