使用基于 PromQL 的条件创建提醒政策 (API)

本页面介绍了如何创建基于 PromQL 的提醒政策 使用 Cloud Monitoring API 监控条件。您可以使用 PromQL 查询,以创建复杂的条件, 例如比率、动态阈值和指标评估等功能。

如需了解一般信息,请参阅使用 PromQL 的提醒政策

如果您在 Cloud Monitoring 之外的 Prometheus 环境中工作,并且有 Prometheus 提醒规则,则可以使用 Google Cloud CLI 通过 PromQL 查询将其迁移到 Monitoring 提醒政策。如需了解详情,请参阅 从 Prometheus 迁移提醒规则和接收器

使用 PromQL 查询创建提醒政策

您可以使用 alertPolicies.create 方法以编程方式创建提醒政策。

使用 Cloud Build 创建提醒政策 基于 PromQL 的条件 您的Condition 类型必须为 PrometheusQueryLanguageCondition。 此条件类型允许使用 PromQL 定义提醒政策。

以下示例展示了用于提醒政策条件的 PromQL 查询,该查询使用 kube-state 导出器中的一个指标来查找容器在过去 30 分钟内重启的次数:

rate(kube_pod_container_status_restarts[30m]) * 1800 > 1

构建提醒政策

要构建包含基于 PromQL 的条件的提醒政策,请使用 AlertPolicy 条件类型PrometheusQueryLanguageConditionPrometheusQueryLanguageCondition 具有以下结构:

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "alertRule": string
}

PrometheusQueryLanguageCondition 字段的定义如下:

  • query:要计算的 PromQL 表达式。相当于标准 Prometheus 提醒规则中的 expr 字段。
  • duration:指定播放期间的时长 因此,查询的每次评估都必须在true 提醒政策。该值必须是分钟数, (以秒为单位);例如 600s(时长 10 分钟)。如需了解详情,请参阅基于指标的提醒政策的行为
  • evaluationInterval:PromQL 之间的时间间隔(以秒为单位) 查询评估。 默认值是 30 秒。如果 “PrometheusQueryLanguageCondition”是通过迁移 Prometheus 创建的 则这个值来自 包含 Prometheus 提醒规则。

  • labels:在 PromQL 中添加或覆盖标签的可选方法 表达式结果。

  • ruleGroup:如果提醒政策是从 Prometheus 迁移的 配置文件,那么此字段会包含 name 字段的值 来自 Prometheus 中的规则组 配置文件在 Cloud Monitoring API 中创建 PromQL 提醒政策时,此字段不是必需的。

  • alertRule:如果提醒政策是从 Prometheus 迁移的 配置文件,那么此字段会包含 alert 字段的值 来自 Prometheus 中的提醒规则, 配置文件在 Cloud Monitoring API 中创建 PromQL 提醒政策时,此字段不是必需的。

例如,以下条件使用 PromQL 查询来 查找过去某个容器的上次重启次数 30 分钟:

"conditionPrometheusQueryLanguage": {
  "query": "rate(kube_pod_container_status_restarts[30m]) * 1800 > 1",
  "duration": "600s",
  evaluationInterval: "60s",
  "alertRule": "ContainerRestartCount",
  "labels": {
    "action_required":"true",
    "severity":"critical/warning/info"}
}

使用此结构作为条件中 conditionPrometheusQueryLanguage 字段的值,而该条件又嵌入到提醒政策结构中。如需详细了解这些结构,请参阅 AlertPolicy

下面显示了包含 PrometheusQueryLanguageCondition 的完整政策 条件:

{
  "displayName": "Container Restarts",
  "documentation": {
    "content": "Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes.",
    "mimeType": "text/markdown",
    "subject": "Container ${resource.label.container_name} in Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes."
  },
  "userLabels": {},
  "conditions": [
    {
      "displayName": "Container has restarted",
      "conditionPrometheusQueryLanguage": {
        "query": "rate(kubernetes_io:container_restart_count[30m]) * 1800",
        "duration": "600s",
        evaluationInterval: "60s",
        "alertRule": "ContainerRestart",
        "labels": {
          "action_required":"true",
          "severity":"critical/warning/info"}
      }
    }
  ],
  "combiner": "OR",
  "enabled": true
}

创建提醒政策

如需创建提醒政策,请将提醒政策 JSON 放入名为 POLICY_NAME.json 的文件中,然后运行以下命令:

curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN"
-H 'Content-Type: application/json'
-X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies

如需详细了解用于提醒政策的 Monitoring API,请参阅使用 API 管理提醒政策

如需详细了解如何使用 curl,请参阅调用 curl

使用 Terraform

有关如何使用 Terraform,请参阅condition_prometheus_query_language google_monitoring_alert_policy Terraform 注册表

如需了解有关将 Google Cloud 与 Terraform 搭配使用的一般信息,请参阅将 Terraform 与 Google Cloud 搭配使用

调用 curl

每个 curl 调用都包含一组参数,后跟 API 资源的网址。常见参数包括 Google Cloud 项目 ID 和身份验证令牌。这些值在此处由 PROJECT_IDTOKEN 环境变量表示。

您可能还需要指定其他参数,例如,指定 HTTP 请求的类型(例如 -X DELETE)。默认请求为 GET,因此示例未指定该请求。

每个 curl 调用具有以下一般结构:

curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>

要使用 curl,您必须指定项目 ID 和访问令牌。为了减少输入和错误,您可以将它们放在环境变量中,以便以这种方式将它们传递给 curl

要设置这些变量,请执行以下操作:

  1. 创建环境变量来保存指标范围的范围限定项目的 ID。以下步骤将调用变量 PROJECT_ID

    PROJECT_ID=a-sample-project
    
  2. 向 Google Cloud CLI 进行身份验证:

    gcloud auth login
    
  3. 可选。为避免必须使用每个 gcloud 命令指定项目 ID,请使用 gcloud CLI 将项目 ID 设置为默认值:

    gcloud config set project ${PROJECT_ID}
    
  4. 创建授权令牌并将其存储到环境变量中。 以下步骤将调用变量 TOKEN

    TOKEN=`gcloud auth print-access-token`
    

    您必须定期刷新访问令牌。如果命令突然报告您未通过身份验证,请重新发布此命令。

  5. 要验证您是否已获得访问令牌,请回显 TOKEN 变量:

    echo ${TOKEN}
    ya29.GluiBj8o....