代管式收集使用入门

本文档介绍了如何使用代管式收集设置 Google Cloud Managed Service per Prometheus。此设置是工作注入的最小示例,它使用 Prometheus 部署来监控示例应用并将收集的指标存储在 Monarch 中。

本页面介绍如何完成以下任务:

  • 设置环境和命令行工具。
  • 为集群设置代管式收集。
  • 配置用于目标爬取和指标注入的资源。
  • 迁移现有的 prometheus-operator 自定义资源。

我们建议您使用代管式收集;它降低了部署、扩缩、分片、配置和维护收集器的复杂性。GKE 和任何其他 Kubernetes 环境均支持代管式收集。如需详细了解代管式和自行部署的数据收集,请参阅使用 Managed Service for Prometheus 收集数据

准备工作

本部分介绍本文档中描述的任务所需的配置。

设置项目和工具

要使用 Google Cloud Managed Service per Prometheus,您需要以下资源:

  • 启用了 Cloud Monitoring API 的 Google Cloud 项目。

    • 如果您没有 Cloud 项目,请执行以下操作:

      1. 在 Cloud Console 中,转到新建项目

        创建新项目

      2. 项目名称字段中,为您的项目输入一个名称,然后点击创建

      3. 转到结算

        转到“结算”

      4. 在页面顶部选择您刚刚创建的项目(如果尚未选择)。

      5. 系统会提示您选择现有付款资料或创建新的付款资料。

      默认情况下,新项目会启用 Monitoring API。

    • 如果您已有 Cloud 项目,请确保已启用 Monitoring API:

      1. 转到 API 和服务

        转到 API 和服务

      2. 选择您的项目。

      3. 点击启用 API 和服务

      4. 搜索“Monitoring”。

      5. 在搜索结果中,点击“Cloud Monitoring API”。

      6. 如果未显示“API 已启用”,请点击启用按钮。

  • Kubernetes 集群。如果您没有 Kubernetes 集群,请按照 GKE 快速入门中的说明进行操作。

您还需要以下命令行工具:

  • gcloud
  • kubectl

gcloudkubectl 工具是 Google Cloud CLI 的一部分。如需了解如何安装这些工具,请参阅管理 Google Cloud CLI 组件。如需查看已安装的 gcloud CLI 组件,请运行以下命令:

gcloud components list

配置您的环境

为避免重复输入您的项目 ID 或集群名称,请执行以下配置:

  • 按如下方式配置命令行工具:

    • 配置 gcloud CLI 以引用您的 Cloud 项目的 ID:

      gcloud config set project PROJECT_ID
      
    • 配置 kubectl CLI 以使用集群:

      kubectl config set-cluster CLUSTER_NAME
      

    如需详细了解这些工具,请参阅以下内容:

设置命名空间

为您在示例应用中创建的资源创建 gmp-test Kubernetes 命名空间:

kubectl create ns gmp-test

设置代管式收集

如需下载代管式收集并将其部署到集群,您必须为代管式服务应用 setupoperator 清单。您可以通过以下方式应用清单:

  • 适用于 Google Kubernetes Engine 的 Google Cloud Console。
  • Google Cloud CLI。如需使用 gcloud CLI,您必须运行 GKE 1.21.4-gke.300 版或更高版本,并且必须安装 gcloud CLI 的 beta 组件。
  • 适用于非 GKE Kubernetes 环境的 kubectl CLI。

Cloud Console

您可以使用 Cloud Console 执行以下操作:

  • 将清单应用于现有 GKE 集群。
  • 创建应用了清单的新 GKE 集群。

如需使用清单更新现有集群,请执行以下操作:

  1. 在 Cloud Console 中,选择 Kubernetes Engine 或使用以下按钮:

    转到 Kubernetes Engine

  2. 选择集群

  3. 点击集群的名称。

  4. 功能列表中,找到 Managed Service for Prometheus 选项。如果该选项被列为已停用,请点击 修改,然后选择启用 Managed Service for Prometheus

  5. 点击保存更改

如需创建应用了清单的集群,请执行以下操作:

  1. 在 Cloud Console 中,选择 Kubernetes Engine 或使用以下按钮:

    转到 Kubernetes Engine

  2. 选择集群

  3. 点击创建

  4. 点击 GKE Standard 选项的配置,并使用集群基本信息窗格配置集群。

  5. 在导航面板中,点击功能

  6. 操作部分中,选择启用 Managed Service for Prometheus

  7. 点击保存

gcloud CLI

您可以使用 gcloud CLI 执行以下操作:

  • 将清单应用于现有 GKE 集群。
  • 创建应用了清单的新 GKE 集群。

这些命令最长可能需要 5 分钟才能完成。

如需使用清单更新现有集群,请根据您的集群是可用区级还是区域级来运行以下 update 命令之一:

  • gcloud beta container clusters update CLUSTER_NAME --enable-managed-prometheus --zone ZONE
    
  • gcloud beta container clusters update CLUSTER_NAME --enable-managed-prometheus --region REGION
    

如需创建应用了清单的集群,请运行以下命令:

gcloud beta container clusters create CLUSTER_NAME --zone ZONE --enable-managed-prometheus

kubectl CLI

如需在使用非 GKE Kubernetes 集群时应用清单,请运行以下命令:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/manifests/setup.yaml

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/manifests/operator.yaml

应用清单后,代管式收集将运行,但不会生成任何指标。您必须部署一个爬取有效指标端点的 PodMonitoring 资源,才能在查询界面中查看任何数据。

如需了解适用于 Prometheus 运算符的代管式服务,请参阅清单页面

部署示例应用

代管式服务为在其 metrics 端口上发出 Prometheus 指标的示例应用提供清单。该应用使用三个副本。

要部署示例应用,请运行以下命令:

kubectl -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml

配置 PodMonitoring 资源

要注入示例应用发出的指标数据,请使用目标爬取。目标爬取和指标注入使用 Kubernetes 自定义资源进行配置。代管式服务使用 PodMonitoring 自定义资源 (CR)。

PodMonitoring CR 仅在部署了 CR 的命名空间中抓取目标。如需抓取多个命名空间中的目标,请在每个命名空间中部署同一 PodMonitoring CR。 您可以通过运行 kubectl get podmonitoring -A 来验证 PodMonitoring 资源是否已安装在预期的命名空间中。

如需了解所有 Managed Service for Prometheus CR 的参考文档,请参阅 prometheus-engine/doc/api 参考文档

以下清单在 gmp-test 命名空间中定义了 PodMonitoring 资源 prom-example。该资源使用 Kubernetes 标签选择器查找命名空间中值为 prom-exampleapp 标签的所有 pod。在 /metrics 路径上,每 30 秒在名为 metrics 的端口上抓取匹配的 pod。

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: prom-example
spec:
  selector:
    matchLabels:
      app: prom-example
  endpoints:
  - port: metrics
    interval: 30s

要应用此资源,请运行以下命令:

kubectl -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml

您的代管式收集器现在正在爬取匹配的 pod。

要配置应用于所有命名空间中的一系列 pod 的横向收集,请使用 ClusterPodMonitoring 资源。ClusterPodMonitoring 资源提供与 PodMonitoring 资源相同的接口,但不会将发现的 pod 限制为给定命名空间。

如果您在 GKE 上运行,则可以执行以下操作:

如果您在 GKE 之外运行,则需要创建服务帐号并授权其写入指标数据,如以下部分所述。

明确提供凭据

在 GKE 上运行时,收集 Prometheus 服务器会根据 Compute Engine 默认服务帐号或 Workload Identity 设置自动从环境中检索凭据。

在非 GKE Kubernetes 集群中,必须通过 gmp-public 命名空间中的 OperatorConfig 资源明确提供凭据。

  1. 创建服务帐号:

    gcloud iam service-accounts create gmp-test-sa
    

  2. 向服务帐号授予所需权限:

    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  3. 创建并下载服务帐号的密钥:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  4. 将密钥文件作为 Secret 添加到非 GKE 集群:

    kubectl -n gmp-public create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  5. 打开 OperatorConfig 资源以进行修改:

    kubectl -n gmp-public edit operatorconfig config
    

  6. 将粗体显示的文本添加到资源:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      credentials:
        name: gmp-test-sa
        key: key.json
    
    请务必将这些凭据添加到 rules 部分,以便代管式规则评估正常工作。

  7. 保存该文件并关闭编辑器。应用更改后,系统会重新创建 pod 并使用给定服务帐号向指标后端进行身份验证。

代管式收集的其他主题

本部分介绍了如何执行以下操作:

  • 抓取 Kubelet 和 cAdvisor 指标。
  • 过滤您导出到代管式服务的数据。
  • 转换现有 prom-operator 资源以用于代管式服务。

抓取 Kubelet 和 cAdvisor 指标

Kubelet 会公开有关其自身的指标以及有关在其节点上运行的容器的 cAdvisor 指标。可以通过更新 OperatorConfig 来注入这些指标。

  1. 打开 OperatorConfig 资源以进行修改:

    kubectl -n gmp-public edit operatorconfig config
    
  2. 将以下粗体显示的 collection 部分添加到资源:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      kubeletScraping:
        interval: 15s
    
  3. 保存该文件并关闭编辑器。

在很短的时间后,Kubelet 指标端点将被抓取,之后您便可在适用于 Prometheus 的代管式服务中查询相关指标。

过滤导出的指标

如果您收集大量数据,则可能需要防止将一些时序发送到 Managed Service for Prometheus,以降低费用。

如要过滤导出的指标,您可以在 OperatorConfig 资源中配置一组 PromQL 系列选择器。如果某时间序列满足至少一个选择器,则会将时间序列导出到 Managed Service for Prometheus;也就是说,在确定资格时,会对单个选择器中的条件进行与 (AND) 运算,并会对多个不同的选择器中的条件进行或 (OR) 运算。默认情况下,未指定选择器,并且导出所有时序。以下示例使用了两个选择器:

  1. 打开 OperatorConfig 资源以进行修改:

    kubectl -n gmp-public edit operatorconfig config
    
  2. 向资源添加 collection 过滤条件,如下面的粗体文字所示。filter.matchOneOf 配置部分与 Prometheus 联合的 match[] 参数具有相同的语义。

    此示例过滤条件仅导致“prometheus”作业的指标以及由聚合到作业级别的记录规则生成的指标(遵循命名最佳实践时)被导出。所有其他时序的样本都会被过滤掉:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      filter:
        matchOneOf:
        - '{job="prometheus"}'
        - '{__name__=~"job:.+"}'
    
  3. 保存该文件并关闭编辑器。

转换现有的 prometheus-operator 资源

您通常可以将现有的 prometheus-operator 资源转换为 Managed Service for Prometheus 代管式收集 PodMonitoring 和 ClusterPodMonitoring 资源。

例如,ServiceMonitor 资源定义了对一组服务的监控。PodMonitoring 资源提供 ServiceMonitor 资源提供的部分字段。您可以通过映射下表中介绍的字段来将 ServiceMonitor CR 转换为 PodMonitoring CR:

monitoring.coreos.com/v1
ServiceMonitor
兼容性
 
monitoring.googleapis.com/v1
PodMonitoring
.ServiceMonitorSpec.Selector 完全相同 .PodMonitoringSpec.Selector
.ServiceMonitorSpec.Endpoints[] .TargetPort 映射到 .Port
.Path: compatible
.Interval: compatible
.Timeout: compatible
.PodMonitoringSpec.Endpoints[]
.ServiceMonitorSpec.TargetLabels PodMonitor 必须指定:
.FromPod[].From pod 标签
.FromPod[].To 目标标签
.PodMonitoringSpec.TargetLabels

以下是 ServiceMonitor CR 示例;转换操作会替换粗体内容,而斜体内容则直接映射:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - targetPort: web
    path: /stats
    interval: 30s
  targetLabels:
  - foo

以下是类似的 PodMonitoring CR,假设您的服务及其 pod 带有 app=example-app 标签。如果此假设不适用,则您需要使用底层 Service 资源的标签选择器。

转换操作已替换粗体内容:

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: example-app
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - port: web
    path: /stats
    interval: 30s
  targetLabels:
    fromPod:
    - from: foo # pod label from example-app Service pods.
      to: foo

您始终可以通过自行部署的收集器(而不是代管式收集器)继续使用现有的 prometheus-operator 资源和部署配置。您可以查询从这两种收集器类型发送的指标,因此您可以为现有 Prometheus 部署使用自行部署的收集器,同时为新的 Prometheus 部署使用代管式收集器。

删除

如需停用通过 gcloud 或 GKE 界面部署的代管式收集,请运行以下命令:

gcloud beta container clusters update CLUSTER_NAME --disable-managed-prometheus

如需停用通过 kubectl 部署的代管式收集,请运行以下命令:

kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/manifests/operator.yaml

关于代管式收集自定义资源的更多内容

如需了解所有 Managed Service for Prometheus 自定义资源的参考文档,请参阅 prometheus-engine/doc/api 参考文档

后续步骤