本页介绍了如何将 Prometheus 提醒规则迁移到基于 PromQL 条件的 Cloud Monitoring 提醒政策。如果您在 Google Cloud 外部的环境中使用 PromQL,迁移过程会很有用。通过将 Prometheus 提醒规则迁移到 Cloud Monitoring,您可以在一个环境中管理所有提醒政策。
如需简要了解基于 PromQL 条件的提醒政策,请参阅使用 PromQL 的提醒政策。
您还可以导入 Grafana 信息中心。如需了解详情,请参阅将 Grafana 信息中心导入 Cloud Monitoring。
迁移的工作原理
在 gcloud CLI 中,您可以迁移现有的提醒规则和接收器,以创建 Cloud Monitoring 提醒政策和通知渠道。gcloud CLI 可以执行以下类型的迁移:
如果您提供包含提醒规则的 Prometheus 配置文件,则 gcloud CLI 会创建基于 PromQL 条件的提醒政策。
您可以同时提供多个 Prometheus 配置文件,以创建基于 PromQL 条件的多个提醒政策。
如果您提供的 Prometheus Alertmanager 文件中至少包含一个接收器,则 gcloud CLI 会将每个接收器转换为 Monitoring 中的等效通知渠道。
如果您同时提供 Prometheus Alertmanager 文件和 Prometheus 配置文件,gcloud CLI 会创建提醒政策和通知渠道,然后将每个新通知渠道与新的提醒政策相关联。
如果您提供了包含提醒规则的多个配置文件,则 gcloud CLI 会将 Alertmanager 文件中的每个通知渠道分配给每项新的提醒政策。
如果您的 Prometheus 提醒规则引用自定义指标,则 gcloud CLI 需要等效的指标描述符才能创建提醒政策。
Prometheus 配置文件和 Prometheus Alertmanager 文件必须采用 YAML 或 JSON 格式,且为有效的 Prometheus 规则文件。
字段映射
gcloud CLI 会在 Prometheus 提醒规则和 Cloud Monitoring 提醒政策之间映射字段,如下所示:
Prometheus 提醒规则 | Cloud Monitoring 提醒政策 |
---|---|
alert |
conditionPrometheusQueryLanguage.alertRule |
expr |
conditionPrometheusQueryLanguage.query |
for |
conditionPrometheusQueryLanguage.duration |
labels |
conditionPrometheusQueryLanguage.labels |
annotations: "summary" |
documentation.subject |
annotations: "description" |
documentation.content |
迁移后的 Prometheus 提醒规则中的 Google Cloud 文档变量
Prometheus 使用提醒字段模板在提醒规则注解和标签中配置变量。迁移包含提醒字段模板的 Prometheus 提醒规则时,Cloud Monitoring 会将模板转换为 Cloud Monitoring 文档变量,如下所示:
Prometheus 提醒字段模板 | Cloud Monitoring 文档变量 |
---|---|
{{$value}} |
此变量是 |
{{humanize $value}} |
此变量是 |
{{$labels}} |
${metric_or_resource.labels} |
{{humanize $labels}} |
${metric_or_resource.labels} |
{{$labels.key}} |
在提醒政策文档配置中显示为
|
{{humanize $labels.<key>}} |
在提醒政策文档配置中显示为
|
从 Prometheus 迁移提醒规则和接收器
如需将 Prometheus 提醒规则迁移到基于 PromQL 条件的 Cloud Monitoring 提醒政策,请使用 gcloud alpha monitoring policies
migrate
命令。您还可以使用此命令将 Prometheus 接收器迁移到 Cloud Monitoring 通知渠道。
- 如需迁移提醒规则,您必须拥有包含提醒规则的 YAML 或 JSON Prometheus 规则文件。
如需迁移接收器,您必须使用包含接收器的 YAML 或 JSON Prometheus Alertmanager 文件。
Google Cloud 不支持迁移 Prometheus 记录规则。如需使用录制规则,我们建议您使用自行部署的规则评估器。
通过 Prometheus 配置文件创建提醒政策
如需根据 Prometheus 配置文件创建提醒政策,请运行以下命令。您可以通过提供多个文件路径来创建多个提醒政策:
gcloud alpha monitoring policies migrate \ --policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2
通过 Prometheus Alertmanager 配置文件创建通知渠道
如需根据 Prometheus Alertmanager 配置文件创建通知渠道,请运行以下命令:
gcloud alpha monitoring policies migrate \ --channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE
同时创建提醒政策和通知渠道
如需通过 Prometheus 配置文件创建提醒政策,同时通过 Prometheus Alertmanager 配置文件创建通知渠道,请运行以下命令:
gcloud alpha monitoring policies migrate \ --policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2 \ --channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE
示例
您有一个 Prometheus 配置文件,其中包含一条提醒规则,该规则会在 CPU 利用率持续超过 75% 一分钟时发出提醒。提醒规则的配置如下:
groups: - name: Utilization_Alerts interval: 30s rules: - alert: CPU_Utilization_Over_75 expr: compute_googleapis_com:instance_cpu_utilization > 75 for: 60s labels: severity: page annotations: subject: "Subject: ${metric.label.value}" description: "CPU utilization is over 75%"
您还拥有一个 Prometheus AlertManager 文件,其中包含电子邮件、PagerDuty 和 Webhook 接收器。
receivers: - name: 'team-emails' email_configs: - to: EMAIL_ADDRESS - name: 'team-pager' pagerduty_configs: - service_key: SERVICE_KEY - name: 'team-webhook' webhook_configs: - url: WEBHOOK_ADDRESS
如需创建提醒政策和通知渠道,请运行以下命令:
gcloud alpha monitoring policies migrate \ --policies-from-prometheus-alert-rules-yaml=PATH_TO_CONFIG_FILE \ --channels-from-prometheus-alertmanager-yaml=PATH_TO_ALERTMANAGER_FILE
然后,gcloud CLI 会创建一个提醒政策,如以下示例所示:
{ "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID", "displayName": "Utilization_Alerts/CPU_Utilization_Over_75", "documentation": { "content": "CPU utilization is over 75%", "mimeType": "text/markdown", "subject": "Subject: ${metric.label.value}" }, "userLabels": {}, "conditions": [ { "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID/conditions/CONDITION_ID", "displayName": "CPU_Utilization_Over_75" "conditionPrometheusQueryLanguage": { "alertRule": "CPU_Utilization_Over_75", "duration": "60s", "evaluationInterval": "30s", "labels": { "severity": "page" }, "query": "compute_googleapis_com:instance_cpu_utilization > 75", "ruleGroup": "Utilization_Alerts" } } ], "alertStrategy": {}, "combiner": "OR", "enabled": true, "notificationChannels": [ "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_1", "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_2", "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_3" ] }
从 Managed Service for Prometheus 迁移提醒规则
Google Cloud 使用 Rules、ClusterRules 和 GlobalRules 自定义资源为 Managed Service for Prometheus 配置托管式规则评估。
如需将这些资源迁移到基于 PromQL 条件的 Google Cloud 提醒政策,请执行以下操作:
将自定义资源的
groups
部分复制到新的 Prometheus 规则文件中。使用 gcloud CLI 迁移规则文件。
例如,您有以下 Rules 自定义资源:
apiVersion: monitoring.googleapis.com/v1 kind: Rules metadata: namespace: NAMESPACE_NAME name: example-rules spec: groups: - name: example interval: 30s rules: - alert: FewerThanTenInstancesUp expr: sum(up) < 10
通过从上一个 Rules 自定义资源复制 groups
创建的 Prometheus 规则文件将如下所示:
groups: - name: example interval: 30s rules: - alert: FewerThanTenInstancesUp expr: sum(up) < 10
迁移多个 Rules 自定义资源
如果您要迁移多个 Rules、CustomRules 或 GlobalRules,我们建议为每个资源构建并迁移单独的规则文件。如需了解详情,请参阅 Prometheus 文档。
管理过滤条件和汇总表达式
Rules 和 ClusterRules 会根据特定标签自动过滤其 Prometheus 提醒表达式。如需在迁移后的提醒政策的查询中保留此行为,您必须先在 Prometheus 规则文件的过滤条件或汇总表达式中明确添加这些标签,然后才能迁移该文件。
例如,Managed Service for Prometheus 的托管规则评估器会按如下方式执行表达式 sum(up) < 10
:
sum(up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}) < 10
不过,如果提醒政策包含 PromQL 查询 sum(up) < 10
,则 Cloud Monitoring 会仅以 sum(up) < 10
的形式执行该查询。此查询会应用于指标范围中的每个 Google Cloud 项目、集群和命名空间。为避免出现这种行为,我们建议您在查询中按标签进行汇总,以确保 Cloud Monitoring 按预期执行您的查询。例如,从 Rules 自定义资源创建规则文件时,您可以将 sum(up) < 10
更改为以下表达式:
sum (up) by (project_id, cluster, namespace) < 10
上述表达式会为每个 Google Cloud 项目、集群和命名空间生成单独的时序,然后将每个时序与 <10
的提醒阈值进行比较。
下表显示了 Rules 和 ClusterRules 的提醒表达式过滤条件的评估顺序:
规则资源类型 | 过滤标签 |
---|---|
规则 |
|
ClusterRule |
|
如需详细了解 Prometheus 表达式中的过滤行为,请参阅即时矢量选择器。