Google Cloud Managed Service for Prometheus 支持与 Prometheus 兼容的规则评估和提醒。本文档介绍如何设置自部署规则评估,包括独立的规则评估器组件。
仅当您要针对全局数据存储区执行规则和提醒时,才需要遵循以下说明。
针对自部署集合的规则评估
部署适 Managed Service for Prometheus 后,您可以使用 Prometheus 配置文件的 rule_files
字段在本地评估已部署的每个实例中的规则。但是,规则的最长查询时段受服务器保留本地数据的时长限制。
大多数规则仅在最近几分钟的数据内执行,因此在每个本地服务器上运行规则通常是有效的策略。在这种情况下,无需进一步设置。
但是,有时根据全局指标后端评估规则会很有用,例如当规则的所有数据没有全部存储在给定 Prometheus 实例上时。对于这些情况,Managed Service for Prometheus 还提供了规则评估器组件。
须知事项
本部分介绍本文档中描述的任务所需的配置。
配置您的环境
为避免重复输入您的项目 ID 或集群名称,请执行以下配置:
按如下方式配置命令行工具:
配置 gcloud CLI 以引用您的 Google Cloud 项目的 ID:
gcloud config set project PROJECT_ID
配置
kubectl
CLI 以使用集群:kubectl config set-cluster CLUSTER_NAME
如需详细了解这些工具,请参阅以下内容:
设置命名空间
为您在示例应用中创建的资源创建 NAMESPACE_NAME
Kubernetes 命名空间:
kubectl create ns NAMESPACE_NAME
验证服务账号凭据
如果您的 Kubernetes 集群已启用 Workload Identity Federation for GKE,则可以跳过此部分。
在 GKE 上运行时,Managed Service for Prometheus 会自动根据 Compute Engine 默认服务账号从环境中检索凭据。默认情况下,默认服务账号具有必要的权限 monitoring.metricWriter
和 monitoring.viewer
。如果您未使用 Workload Identity Federation for GKE,并且之前从默认节点服务账号中移除了任一角色,则必须重新添加这些缺少的权限,然后才能继续。
如果您不在 GKE 上运行,请参阅明确提供凭据。
为 Workload Identity Federation for GKE 配置服务账号
如果您的 Kubernetes 集群未启用 Workload Identity Federation for GKE,则可以跳过此部分。
Managed Service for Prometheus 使用 Cloud Monitoring API 捕获指标数据。如果您的集群使用的是 Workload Identity Federation for GKE,则必须向您的 Kubernetes 服务账号授予 Monitoring API 权限。本节介绍以下内容:
- 创建专用 Google Cloud 服务账号
gmp-test-sa
。 - 将 Google Cloud 服务账号绑定到测试命名空间
NAMESPACE_NAME
中的默认 Kubernetes 服务账号。 - 为 Google Cloud 服务账号授予必要的权限。
创建和绑定服务账号
此步骤显示在 Managed Service for Prometheus 文档中的多个位置。如果您在执行先前的任务时已经执行此步骤,则无需重复执行。请直接跳到向服务账号授权。
以下命令序列会创建 gmp-test-sa
服务账号并将其绑定到 NAMESPACE_NAME
命名空间中的默认 Kubernetes 服务账号:
gcloud config set project PROJECT_ID \ && gcloud iam service-accounts create gmp-test-sa \ && gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \ gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ && kubectl annotate serviceaccount \ --namespace NAMESPACE_NAME \ default \ iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
如果您使用的是其他 GKE 命名空间或服务账号,请适当调整命令。
向服务账号授权
相关权限组已收集到多个角色中,您可以将这些角色授予主账号(在此示例中为 Google Cloud 服务账号)。如需详细了解 Monitoring 角色,请参阅访问权限控制。
以下命令会向 Google Cloud 服务账号 gmp-test-sa
授予读写指标数据所需的 Monitoring API 角色。
如果您在执行先前的任务时已经为 Google Cloud 服务账号授予了特定角色,则无需再次执行此操作。
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
调试 Workload Identity Federation for GKE 配置
如果您在使 Workload Identity Federation for GKE 正常工作时遇到问题,请参阅验证 Workload Identity Federation for GKE 设置的文档和 Workload Identity Federation for GKE 故障排除指南。
由于拼写错误和部分复制粘贴是配置 Workload Identity Federation for GKE 时最常见的错误来源,因此我们强烈建议使用这些说明中代码示例中嵌入的可编辑变量和可点击复制粘贴图标。
生产环境中的 Workload Identity Federation for GKE
本文档中描述的示例将 Google Cloud 服务账号绑定到默认 Kubernetes 服务账号,并授予 Google Cloud 服务账号使用 Monitoring API 所需的所有权限。
在生产环境中,您可能需要使用更精细的方法,其中每个组件对应一个服务账号,并且每个服务账号都具有最小的权限。如需详细了解如何为工作负载身份管理配置服务账号,请参阅使用 Workload Identity Federation for GKE。
部署独立规则评估器
Managed Service for Prometheus 规则评估器会根据 Managed Service for Prometheus HTTP API 评估 Prometheus 提醒和记录规则,并将结果写回 Monarch。它接受与 Prometheus 相同的配置文件格式和规则文件格式。这些标志也几乎相同。
创建预配置规则评估器的示例部署,以评估提醒和记录规则:
kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/manifests/rule-evaluator.yaml
验证规则评估器的 pod 是否已成功部署:
kubectl -n NAMESPACE_NAME get pod
如果部署成功,您将会看到如下所示的输出:
NAME READY STATUS RESTARTS AGE ... rule-evaluator-64475b696c-95z29 2/2 Running 0 1m
验证规则评估器成功部署后,您可以调整已安装的清单来执行以下操作:
- 添加自定义规则文件。
- 配置规则评估器,以使用配置文件的
alertmanager_config
字段将提醒发送到自部署的 Prometheus Alertmanager。
如果您的 Alertmanager 与规则评估器位于不同的集群中,您可能需要设置 Endpoints 资源。例如,如果您的 OperatorConfig 指定可以在 Endpoints 对象 ns=alertmanager/name=alertmanager
中找到 Alertmanager 端点,则可以手动或以编程方式创建此对象,并使用其他集群中的可访问 IP 填充此对象。
明确提供凭据
在 GKE 上运行时,规则评估器会根据节点的服务账号或 Workload Identity Federation for GKE 设置自动从环境中检索凭据。在非 GKE Kubernetes 集群中,必须使用标志或 GOOGLE_APPLICATION_CREDENTIALS
环境变量将凭据明确提供给规则评估器。
将上下文设置为目标项目:
gcloud config set project PROJECT_ID
创建服务账号:
gcloud iam service-accounts create gmp-test-sa
此步骤会创建您可能已在 Workload Identity Federation for GKE 说明中创建的服务账号。
向服务账号授予所需权限:
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
创建并下载服务账号的密钥:
gcloud iam service-accounts keys create gmp-test-sa-key.json \ --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
将密钥文件作为 Secret 添加到非 GKE 集群:
kubectl -n NAMESPACE_NAME create secret generic gmp-test-sa \ --from-file=key.json=gmp-test-sa-key.json
打开规则评估器 Deployment 资源进行修改:
kubectl -n NAMESPACE_NAME edit deploy rule-evaluator
将粗体显示的文本添加到资源:
apiVersion: apps/v1 kind: Deployment metadata: namespace: NAMESPACE_NAME name: rule-evaluator spec: template containers: - name: evaluator args: - --query.credentials-file=/gmp/key.json - --export.credentials-file=/gmp/key.json ... volumeMounts: - name: gmp-sa mountPath: /gmp readOnly: true ... volumes: - name: gmp-sa secret: secretName: gmp-test-sa ...
保存该文件并关闭编辑器。应用更改后,系统会重新创建 pod 并使用给定服务账号向指标后端进行身份验证。
GOOGLE_APPLICATION_CREDENTIALS
环境变量来设置密钥文件路径,而不是使用本示例中设置的标志。多项目和全局规则评估
我们建议您在每个 Google Cloud 项目和区域中运行一个规则评估器实例,而不是运行一个实例来针对多个项目和区域进行评估。但是,在需要的场景中,我们也支持多项目规则评估。
部署在 Google Kubernetes Engine 上时,规则评估器会使用其自动检测的与集群关联的 Google Cloud 项目。 如需评估跨项目的规则,您可以使用
--query.project-id
标志并指定具有多项目指标范围的项目,从而替换查询的项目。如果您的指标范围包含所有项目,则您的规则进行全局评估。如需了解详情,请参阅指标范围。您还必须更新规则评估器使用的服务账号的权限,以便服务账号可以从范围限定项目中读取数据,以及写入指标范围内所有受监控的项目。
编写规则时保留标签
对于评估器向 Managed Service for Prometheus 写入的数据,评估器支持与 Managed Service for Prometheus 服务器二进制文件相同的
--export.*
标志和基于external_labels
的配置。我们强烈建议您编写规则,以便针对聚合级别适当保留project_id
、location
、cluster
和namespace
标签,否则查询性能可能会下降,并且您可能遇到基数限制。project_id
或location
标签是必需的。如果缺少这些标签,规则评估结果中的值会根据规则评估器的配置设置。缺少的cluster
或namespace
标签不会被赋予值。自我可观测性
规则评估器使用
--web.listen-address
标志在可配置端口上发出 Prometheus 指标。例如,如果 Pod
rule-evaluator-64475b696c-95z29
在端口9092
上公开这些指标,则可以使用kubectl
手动查看这些指标:# Port forward the metrics endpoint. kubectl port-forward rule-evaluator-64475b696c-95z29 9092 # Then query in a separate terminal. curl localhost:9092/metrics
您可以将 Prometheus 堆栈配置为收集这些数据,以便了解规则评估器的性能。
高可用性部署
规则评估程序可以在高可用性设置中运行,方法与文档中介绍的 Prometheus 服务器的方法相同。
使用 Cloud Monitoring 指标进行提醒
您可以使用 PromQL 配置规则评估器以针对 Google Cloud 系统指标发出提醒。有关如何创建有效查询的说明,请参阅 PromQL for Cloud Monitoring 指标。