JSON 格式的示例政策

本文档提供提醒政策的示例。示例采用 JSON 格式编写,且使用 Monitoring 过滤条件。无论您使用 Monitoring 过滤条件还是 Monitoring Query Language (MQL) 来定义政策,都可以使用 JSON 或 YAML 创建政策。Google Cloud CLI 可以读取和写入 JSON 和 YAML,而 REST API 可以读取 JSON。

如需查看使用 MQL 的提醒政策示例,请参阅以下文档:

如需了解如何配置提醒政策字段,请参阅以下内容:

为现有政策生成 YAML

如需生成现有提醒政策的 YAML 表示法,请使用 gcloud alpha monitoring policies list 命令列出政策,并使用 gcloud alpha monitoring policies describe 命令输出政策。

如需生成现有通知渠道的 YAML 表示法,请使用 gcloud alpha monitoring channels list 命令列出您的渠道,并使用 gcloud alpha monitoring channels describe 命令输出渠道配置。

如果您未在 Google Cloud CLI 命令中添加 --format 标志,则两个 gcloud ... describe 命令的格式默认为 YAML。

例如,以下 gcloud alpha monitoring policies describe 命令会检索名为 projects/a-gcp-project/alertPolicies/12669073143329903307 的单个政策,而重定向 (>) 会将输出复制到 test-policy.yaml 文件:

gcloud alpha monitoring policies describe projects/a-gcp-project/alertPolicies/12669073143329903307 > test-policy.yaml

为现有政策生成 JSON

如需生成现有提醒政策和通知渠道的 JSON 表示形式,请执行以下任一操作:

政策示例

备份/恢复示例所示,您可以使用已保存的政策来创建这些政策的新副本。

您可以使用保存在一个项目中的政策,在另一个项目中创建新政策或类似政策。但是,您必须首先在已保存政策的副本中进行以下更改:

  • 从任何通知渠道中移除以下字段:
    • name
    • verificationStatus
  • 在引用提醒政策中的通知渠道之前先创建通知渠道(您需要新的渠道标识符)。
  • 从您正在重新创建的任何提醒政策中移除以下字段:
    • name
    • condition.name
    • creationRecord
    • mutationRecord

本文档中的政策是使用 Google Cloud 控制台中 Monitoring 使用的相同术语整理的,例如“变化率政策”。条件分为两种:

  • 阈值条件;界面中提到的几乎所有的政策类型都是阈值条件的变体
  • 缺失条件

在以下示例中,这些条件对应于 conditionThresholdconditionAbsent。如需了解详情,请参阅 Condition 的参考页面。

您可以使用 Google Cloud 控制台手动创建其中许多政策,但有些政策只能使用 Monitoring API 创建。如需了解详情,请参阅创建提醒政策 (UI)使用 API 创建提醒政策

指标阈值政策

指标阈值政策用于检测某个值是否超出预定边界。通过阈值政策,您可以了解某些事件即将来临,以便采取一些措施。例如,当可用磁盘空间少于总磁盘空间的 10% 时,满足指标阈值政策的条件。

以下提醒政策使用平均 CPU 使用率作为一组虚拟机运行状况的指标。当一个项目中虚拟机的平均 CPU 利用率(以 60 秒为间隔测量)持续 15 分钟(900 秒)超过 90% 利用率的阈值时,满足政策的条件:

{
    "displayName": "Very high CPU usage",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "CPU usage is extremely high",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "60s",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [
                            "project"
                        ],
                        "perSeriesAligner": "ALIGN_MAX"
                    }
                ],
                "comparison": "COMPARISON_GT",
                "duration": "900s",
                "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
                          AND resource.type=\"gce_instance\"",
                "thresholdValue": 0.9,
                "trigger": {
                    "count": 1
                }
            }
        }
    ],
}

指标缺失政策

如果在指定的时间段内未向指标写入任何数据,则满足指标缺失条件。

如需演示这种政策,可采用的一种方法是创建自定义指标。

以下是自定义指标的示例描述符。您可以使用 APIs Explorer 创建该指标。

{
  "description": "Number of times the pipeline has run",
  "displayName": "Pipeline runs",
  "metricKind": "GAUGE",
  "type": "custom.googleapis.com/pipeline_runs",
  "labels": [
    {
      "description": "The name of the pipeline",
      "key": "pipeline_name",
      "valueType": "STRING"
    },
  ],
  "unit": "1",
  "valueType": "INT64"
}

如需了解详情,请参阅用户定义的指标概览

当数据停止写入指标大约一个小时后,就会满足以下提醒政策中的条件:换句话说,每小时的流水线未能运行。请注意,这里使用的条件是 conditionAbsent

{
    "displayName": "Data ingestion functioning",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Hourly pipeline is up",
            "conditionAbsent": {
                "duration": "3900s",
                "filter": "resource.type=\"global\"
                          AND metric.type=\"custom.googleapis.com/pipeline_runs\"
                          AND metric.label.pipeline_name=\"hourly\"",
            }
        }
    ],
}

预测政策

如果针对某个时序在考量时长内进行的所有预测都相同,并且预测时序将违反预测范围内的阈值,则满足预测条件

预测条件是配置为使用预测的指标阈值条件。如以下示例中所示,这些条件包含一个 forecastOptions 字段,用于启用预测并指定预测范围。在以下示例中,预测范围设置为 1 小时,即最小值:

{
    "displayName": "NFS free bytes alert",
    "combiner": "OR",
    "conditions": [
      {
        "displayName": "Filestore Instance - Free disk space percent",
        "conditionThreshold": {
          "aggregations": [
            {
              "alignmentPeriod": "300s",
              "perSeriesAligner": "ALIGN_MEAN"
            }
          ],
          "comparison": "COMPARISON_LT",
          "duration": "900s",
          "filter": "resource.type = \"filestore_instance\" AND metric.type = \"file.googleapis.com/nfs/server/free_bytes_percent\"",
          "forecastOptions": {
            "forecastHorizon": "3600s"
          },
          "thresholdValue": 20,
          "trigger": {
            "count": 1
          }
        }
      }
    ],
}

变化率政策

当时时序中的值增加或减少时,至少按阈值指定的百分比时,满足变化率条件。创建此类条件时,系统会先对时序应用变化百分比计算,然后再与阈值进行比较。

该条件会对过去 10 分钟的指标值求平均值,然后将结果与考量时长之前测得的 10 分钟平均值进行比较。指标变化率条件使用的 10 分钟回溯期是固定值;您无法对其进行更改。不过,您需要在创建条件时指定考量时长。

当 CPU 使用率快速上升时,以下政策会向您发出提醒:

{
  "displayName": "High CPU rate of change",
  "combiner": "OR",
  "conditions": [
    {
      "displayName": "CPU usage is increasing at a high rate",
      "conditionThreshold": {
         "aggregations": [
           {
             "alignmentPeriod": "900s",
             "perSeriesAligner": "ALIGN_PERCENT_CHANGE",
           }],
        "comparison": "COMPARISON_GT",
        "duration": "180s",
        "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
        "thresholdValue": 0.5,
        "trigger": {
          "count": 1
         }
      }
    }
  ],
}

分组聚合政策

当 Google Kubernetes Engine 集群的平均 CPU 使用率超过阈值时,下面的政策会向您发出提醒:

{
    "displayName": "CPU utilization across GKE cluster exceeds 10 percent",
    "combiner": "OR",
    "conditions": [
         {
            "displayName": "Group Aggregate Threshold across All Instances in Group GKE cluster",
            "conditionThreshold": {
                "filter": "group.id=\"3691870619975147604\" AND metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
                "comparison": "COMPARISON_GT",
                "thresholdValue": 0.1,
                "duration": "300s",
                "trigger": {
                    "count": 1
                },
                "aggregations": [
                    {
                        "alignmentPeriod": "60s",
                        "perSeriesAligner": "ALIGN_MEAN",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [
                              "project"
                        ]
                    },
                    {
                        "alignmentPeriod": "60s",
                        "perSeriesAligner": "ALIGN_SUM",
                        "crossSeriesReducer": "REDUCE_MEAN"
                    }
                ]
            },
        }
    ],
}

此政策假定已存在以下资源组:

    {
        "name": "projects/a-gcp-project/groups/3691870619975147604",
        "displayName": "GKE cluster",
        "filter": "resource.metadata.name=starts_with(\"gke-kuber-cluster-default-pool-6fe301a0-\")"
    }

如需确定组的等效字段,请使用 project.groups.list 参考页面上的 API Explorer 列出组详细信息。

正常运行时间检查政策

拨测的状态会显示在 Uptime Check 页面上,但您可以配置提醒政策,以便 Cloud Monitoring 在拨测失败时向您发送通知。

例如,以下 JSON 描述了 Google Cloud 网站上的 HTTPS 拨测。提醒政策每 5 分钟检查一次可用性。

拨测是使用 Google Cloud 控制台创建的。这里的 JSON 表示是通过使用 Monitoring API 列出项目中的拨测来创建的;请参阅 uptimeCheckConfigs.list。您还可以使用 Monitoring API 创建拨测。

{
    "name": "projects/a-gcp-project/uptimeCheckConfigs/uptime-check-for-google-cloud-site",
    "displayName": "Uptime check for Google Cloud site",
    "monitoredResource": {
        "type": "uptime_url",
        "labels": {
            "host": "cloud.google.com"
      }
    },
    "httpCheck": {
        "path": "/index.html",
        "useSsl": true,
        "port": 443,
        "authInfo": {}
    },
    "period": "300s",
    "timeout": "10s",
    "contentMatchers": [
        {}
    ]
}

要为正常运行时间检查创建提醒政策,请使用 UPTIME_CHECK_ID 引用正常运行时间检查。此 ID 是在创建检查时设置的;它显示为 name 字段的最后一个组成部分,位于界面的配置摘要中的 Check ID。如果您使用的是 Monitoring API,则 uptimeCheckConfigs.create 方法会返回该 ID。

ID 来源于 displayName,在本示例中,它是在界面中设置的。 可以通过列出拨测并查看 name 值来验证 ID。

上述正常运行时间检查的 ID 是 uptime-check-for-google-cloud-site

如果拨测失败,或者 Google Cloud 网站上的 SSL 证书将在 15 天内过期,则满足以下提醒政策的条件。如果满足任一条件,则 Monitoring 会向指定的通知渠道发送通知:

{
    "displayName": "Google Cloud site uptime failure",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Failure of uptime check_id uptime-check-for-google-cloud-site",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "1200s",
                        "perSeriesAligner": "ALIGN_NEXT_OLDER",
                        "crossSeriesReducer": "REDUCE_COUNT_FALSE",
                        "groupByFields": [ "resource.label.*" ]
                    }
                ],
                "comparison": "COMPARISON_GT",
                "duration": "600s",
                "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"
                          AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                          AND resource.type=\"uptime_url\"",
                "thresholdValue": 1,
                "trigger": {
                    "count": 1
                }
            }
        },
        {
            "displayName": "SSL Certificate for google-cloud-site expiring soon",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "1200s",
                        "perSeriesAligner": "ALIGN_NEXT_OLDER",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [ "resource.label.*" ]
                    }
                ],
                "comparison": "COMPARISON_LT",
                "duration": "600s",
                "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires\"
                          AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                          AND resource.type=\"uptime_url\"",
                "thresholdValue": 15,
                "trigger": {
                    "count": 1
                }
            }
        }
    ],
}

条件中的过滤条件按类型和标签指定受监控的指标。指标类型为 monitoring.googleapis.com/uptime_check/check_passedmonitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires。指标标签标识正受监控的特定正常运行时间检查。 在本示例中,标签字段 check_id 包含正常运行时间检查 ID。

AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"

如需了解详情,请参阅监控过滤条件

进程运行状况政策

如果与某一模式匹配的进程数量超过阈值,则进程运行状况政策会向您发出通知。这可通知您关于进程的一些情况,例如某个进程已停止运行。

当与字符串 nginx 匹配的进程(以用户 www 身份运行)处于可用状态的时间超过 5 分钟时,此提醒政策会导致 Monitoring 向指定的通知渠道发送通知:

{
    "displayName": "Server health",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Process 'nginx' is not running",
            "conditionThreshold": {
                "filter": "select_process_count(\"has_substring(\\\"nginx\\\")\", \"www\") AND resource.type=\"gce_instance\"",
                "comparison": "COMPARISON_LT",
                "thresholdValue": 1,
                "duration": "300s"
            }
        }
    ],
}

如需了解详情,请参阅进程运行状况

指标比率

我们建议您使用 Monitoring Query Language (MQL) 创建基于比率的提醒政策。虽然 Cloud Monitoring API 支持构建某些基于过滤条件的比率,但 MQL 提供了更灵活、更可靠的解决方案:

本部分介绍基于过滤条件的比率。通过 API,您可以创建一项政策来计算两个相关指标的比率,并在该比率超过阈值时触发。您还可以查看政策。相关指标必须具有相同的 MetricKind。例如,如果两个指标都是增量指标,您可以创建基于比率的提醒政策。要确定指标类型的 MetricKind,请参阅指标列表

比率条件是简单阈值条件的变体,比率政策中的条件使用两种过滤条件:常规 filter(作为比率的分子)和 denominatorFilter(作为比率的分母)。

两个过滤条件中的时序必须以相同的方式聚合,这样计算值的比率才是有意义的。当两个过滤器的比率在指定持续时间内超过阈值时,则满足提醒政策的条件。

下一部分将介绍如何配置提醒政策,以监控 HTTP 错误响应与所有 HTTP 响应的比率。

HTTP 错误比率

以下提醒政策有一个阈值条件,它基于 HTTP 错误响应数量与所有 HTTP 响应数量的比率。

{
    "displayName": "HTTP error count exceeds 50 percent for App Engine apps",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Ratio: HTTP 500s error-response counts / All HTTP response counts",
            "conditionThreshold": {
                 "filter": "metric.label.response_code>=\"500\" AND
                            metric.label.response_code<\"600\" AND
                            metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                            project=\"a-gcp-project\" AND
                            resource.type=\"gae_app\"",
                 "aggregations": [
                    {
                        "alignmentPeriod": "300s",
                        "crossSeriesReducer": "REDUCE_SUM",
                        "groupByFields": [
                          "project",
                          "resource.label.module_id",
                          "resource.label.version_id"
                        ],
                        "perSeriesAligner": "ALIGN_DELTA"
                    }
                ],
                "denominatorFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                                      project=\"a-gcp-project\" AND
                                      resource.type=\"gae_app\"",
                "denominatorAggregations": [
                   {
                      "alignmentPeriod": "300s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "project",
                        "resource.label.module_id",
                        "resource.label.version_id"
                       ],
                      "perSeriesAligner": "ALIGN_DELTA",
                    }
                ],
                "comparison": "COMPARISON_GT",
                "thresholdValue": 0.5,
                "duration": "0s",
                "trigger": {
                    "count": 1
                }
            }
        }
    ]
}

指标和资源类型

此政策的指标类型是 appengine.googleapis.com/http/server/response_count,它有两个标签:

  • response_code 是一个 64 位整数,表示请求的 HTTP 状态代码。此政策根据此标签过滤时间序列数据,因此它可以确定以下各项:
    • 收到的响应数量。
    • 收到的错误响应数量。
    • 错误响应与所有响应的比率。
  • loading 是一个布尔值,用于表明请求是否在加载。loading 标签与此提醒政策无关。

提醒政策会评估来自 App Engine 应用的响应数据,即源自受监控资源类型 gae_app 的数据。此受监控的资源有三个标签:

  • project_id 是 Google Cloud 项目的 ID。
  • module_id 是应用中的服务或模块的名称。
  • version_id 是应用的版本。

如需了解这些指标和受监控的资源类型的参考信息,请参阅指标列表中的 App Engine 指标和受监控资源列表中的 gae_app 条目

此政策的作用

此条件会计算错误响应与总响应的比率。如果在 5 分钟校准时间段内比率大于 50%(即比率大于 0.5),则满足条件。

此政策通过将这些标签的值按每个过滤条件中的时序进行分组来捕获违规的应用模块和版本。

  • 条件中的过滤条件会查看来自 App Engine 应用的 HTTP 响应,并选择在错误范围 (5xx) 内的响应。这是比率中的分子。
  • 条件中的分母过滤条件会查看来自 App Engine 应用的所有 HTTP 响应。

如果满足条件,Monitoring 会立即发送有关新突发事件的通知;条件允许的时长为 0 秒。此条件使用的 trigger 计数为 1,即需要违反条件才能导致突发事件的时序数。对于只有一项服务的 App Engine 应用,trigger 计数为 1 就没有问题。如果您的应用包含 20 项服务,并且您希望在有 3 项或更多项服务违反条件的情况下引发突发事件,请将 trigger 计数设为 3。

设置比率

分子和分母过滤条件完全相同,不同的是,分子中的条件过滤条件与错误范围内的响应代码匹配,分母中的条件过滤条件与所有响应代码匹配。以下子句仅出现在分子条件中:

      metric.label.response_code>=\"500\" AND
      metric.label.response_code<\"600\"

除此之外,分子过滤条件和分母过滤条件是相同的。

每个过滤条件选择的时序必须以相同的方式聚合,这样计算的比率才是有意义的。每个过滤条件可能会收集多个时序,因为标签的每个值组合都对应一个不同的时序。此政策按指定的资源标签对时序集进行分组,从而将时序集划分为一组组。每个组中的某些时序与分子过滤条件匹配;其余的时序则与分母过滤条件匹配。

要计算比率,必须将匹配每个过滤条件的一组时序聚合为一个时序。这样一来,每个组就会有两个时序,一个用于分子,另一个用于分母。接下来,可以计算每组中分子和分母时序中各点的比率。

在此政策中,两个过滤条件的时序聚合如下:

  • 每个过滤条件创建多个以 5 分钟为间隔进行校准的时序,其中值表示对该 5 分钟校准间隔内的值进行 ALIGN_DELTA 计算的结果。此校准器会将该间隔内的匹配响应数作为 64 位整数返回。

  • 此外,每个过滤条件中的时序还会按模块和版本的资源标签值进行分组,因此每个组都包含两组校准的时序,即与分子过滤条件匹配的时序以及与分母过滤条件匹配的时序。

  • 通过使用 REDUCER_SUM 跨序列缩减器对各时序中的值求和,将每个组中与分子或分母过滤条件匹配的时序聚合为一个时序。这样会得到分子的一个时序和分母的一个时序,每个时序都会报告校准间隔中所有匹配时序的响应数。

然后,该政策针对代表每个组的分子和分母时序计算值的比率。计算出比率后,此政策即为简单的指标阈值政策。