代管式规则评估

Google Cloud Managed Service per Prometheus 支持与 Prometheus 兼容的规则评估。本文档介绍如何设置代管式规则评估。

规则评估

Managed Service for Prometheus 提供了一个规则评估器组件,可让您在全局 Prometheus 后端环境中安全地编写规则,从而防止在较大的组织中干扰其他用户的数据。在 Kubernetes 集群上运行时,该组件会自动部署为代管式集合的一部分。

规则

代管式规则评估器使用 Rules 资源配置记录和提醒规则。以下是 Rules 资源的示例:

apiVersion: monitoring.googleapis.com/v1alpha1
kind: Rules
metadata:
  namespace: gmp-test
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

.spec.groups 元素的格式与上游 Prometheus rule_group 数组相同。在 Rules 中定义的提醒和记录规则的范围限定为资源的命名空间(在此示例中为 gmp-test)。系统保证不会根据在项目、集群和命名空间之外生成的指标数据评估规则。这可确保提醒或记录规则不会意外评估您甚至可能不了解的应用中的指标。如需了解如何跨多个命名空间评估时间序列,请参阅 ClusterRules

如需将示例规则应用于您的集群,请运行以下命令:

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

几分钟后,指标 job:up:sum 将变为可用。提醒 AlwaysFiring 也将开始触发。如需了解如何将提醒发送到 Alertmanager,请参阅 Alertmanager 配置

从 Prometheus 规则转换为 Rules

Rules 资源为 Prometheus 规则提供了一个兼容的接口,为将现有规则合并到代管式规则评估中提供了无缝迁移路径。您可以在 Rules 资源中添加现有规则。例如,下面是 Prometheus 规则:

groups:
- name: example
  interval: 30s
  rules:
  - record: job:up:sum
    expr: sum without(instance) (up)
  - alert: AlwaysFiring
    expr: vector(1)

对应的 Rules 资源(粗体字为原始 Prometheus 规则)如下所示:

apiVersion: monitoring.googleapis.com/v1alpha1
kind: Rules
metadata:
  namespace: gmp-test
  name: prometheus-example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

ClusterRules

您可以使用 ClusterRules 资源配置记录和提醒规则,以评估从特定集群的所有命名空间发送到 Managed Service for Prometheus 的所有时间序列。该规范与 Rules 的规范相同。先前的示例 Prometheus 规则将成为以下 ClusterRules 资源:

apiVersion: monitoring.googleapis.com/v1alpha1
kind: ClusterRules
metadata:
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

我们建议您仅在水平指标(例如由服务网格生成的指标)上使用 ClusterRules 资源。对于各个部署的指标,请使用 Rules 资源来确保评估不包含意外数据。

明确提供凭据

在 GKE 上运行时,规则评估器会根据 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.viewer \
    && \
    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/v1alpha1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    rules:
      credentials:
        name: gmp-test-sa
        key: key.json
    

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

Alertmanager 配置

您可以使用 OperatorConfig 资源配置代管式规则评估器以向自行部署的 Prometheus Alertmanager 发送提醒。如需配置规则评估器,请执行以下操作:

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

    kubectl -n gmp-public edit operatorconfig config
    
  2. 配置资源以将提醒发送到您的 Alertmanager 服务:

    apiVersion: monitoring.googleapis.com/v1alpha1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    rules:
      alerting:
        alertmanagers:
        - name: SERVICE_NAME
          namespace: SERVICE_NAMESPACE
          port: PORT_NAME
    

如果您的 Alertmanager 与规则评估器位于不同的集群中,您可能需要设置 Endpoints 资源。例如,如果您的 OperatorConfig 提示可以在 Endpoints 对象 ns=alertmanager/name=alertmanager 中找到 Alertmanager 端点,则可以手动或以编程方式创建此对象,并使用其他集群中的可访问 IP 填充此对象。AlertmanagerEndpoints 配置部分在必要时提供授权配置选项。

全局规则评估

如需跨多个项目或跨集群执行规则,您必须自部署规则评估器。您可以同时运行代管式规则和自部署规则评估器。