消耗率提醒

您可以针对服务等级目标 (SLO) 创建提醒政策,以让您了解自己是否面临违反 SLO 的危险。您可以选择要监控的 SLO,然后设置一则条件,该条件会在被违反时触发提醒。通常情况下,该条件通过选择构成违规的阈值以及允许违规的时间段来表示。如果阈值超过允许的时间段,则会触发提醒政策。

本页介绍了如何针对错误预算的消耗率设置提醒政策。其中未详细介绍提醒政策;并假定您已经了解条件和通知渠道的基本概念。如需了解有关提醒政策以及如何创建提醒政策的常规信息,请参阅使用提醒政策

错误预算的消耗率

您在合规期的错误预算为(1− SLO 目标)×(合规期中符合条件的事件)。如果您的 SLO 目标是 95%,则在 SLO 衡量的事件中,有 5%的事件会在 SLO 目标实现之前失败。消耗率反映了错误预算的耗用速度。超过 1 的消耗率表示,如果当前测量的错误率在任何未来的合规期内保持不变,则该服务将在该期限之外停止 SLO。如需了解详情,请参阅错误预算

消耗率指标由时间序列选择器 select_slo_burn_rate 检索。当您的错误预算的使用速度超过您定义的阈值(在整个提醒的合规期内衡量)时,消耗率提醒政策会通知您。如需详细了解其他时间序列选择器,请参阅检索 SLO 数据。您可以创建使用某些其他时间序列选择器的提醒策略,但您必须使用 Cloud Monitoring API 来创建提醒策略。

概览:在 SLO 上创建提醒政策

为 SLO 创建提醒政策与为任何其他指标创建提醒政策十分类似。

本部分介绍了常规步骤,下面的部分对这些步骤进行了更详细的说明。

要为 SLO 创建提醒政策,请按以下步骤操作:

  1. 确定作为提醒政策创建基础的 SLO。

  2. 为使用所选 SLO 的提醒政策构建条件。 在该条件下,您可以使用时间序列选择器检索 SLO 数据。例如,如果您使用时间序列选择器检索消耗率,则检索的数据将反映所选 SLO 的错误预算的消耗率。

    在该条件下,您还可以在触发提醒之前指定 SLO 的违规阈值和持续时间。例如,您希望在触发警报之前的一段时间内,消耗率高于期望的速率。在这种情况下,“高出部分”的值是条件的阈值,“一段时间”的值是条件的持续时间。

  3. 确定或创建要在提醒政策中使用的通知渠道。

  4. 提供向用户说明触发提醒政策原因的文档

  5. 将这些片段整合到调用中,以创建提醒政策。

如需了解有关提醒政策以及如何创建提醒政策的常规信息,请参阅使用提醒政策

提醒政策和回溯期

当您使用时间序列选择器检索 SLO 数据时,可以指定 SLO 标识符和回溯期。回溯期决定了检索数据的时间要追溯至什么时候。至关重要的是,它还用作计算 SLO 性能和错误预算的合规期。

由于技术方面的原因,目前无法根据合规期超过 24 小时来提醒 SLO 的错误预算消耗率。在许多情况下,如果您的长期(例如 28 天或 30 天)合规期为 24 小时,则足以检测出服务中断情况,并促使他们对服务进行短期运维响应。

合规期越短,问题的检测速度就越快,但请注意,在一天中流量和错误率的大幅变化可能会在低流量时间段内出现过于敏感的提醒。您可以考虑使用明显高于 1 的消耗率阈值,以降低提醒敏感度。

错误预算提醒的类型

在设置提醒政策以监控错误预算时,建议您设置两项相关的提醒政策:

  • 快速消耗提醒,用于提醒您突发的重大消耗量变化,如果不纠正,很快就会用尽错误预算。“按照这个速度,我们将在两天后用掉整个月的错误预算!(At this rate, we'll burn through the whole month'serror budget in two days!)”

    这种情况适合较短的回溯期。 您希望了解某个潜在的灾难性状况是否已经出现并持续存在(即使这种状况短暂存在过)。如果确实是灾难性状况,您肯定想尽快注意到它。

    您在此处设置的消耗率阈值提醒远远高于回溯期的理想基准值。

  • 慢速消耗提醒,用于提醒消耗率,如果消耗率未出现变动,则会在合规期结束前耗尽错误预算。这种情况的紧急程度不如快速消耗。“我们现在略微超出了本月的预期目标,但目前还没有什么大麻烦。(We are slightly exceeding where we'd like to be at this point in the month, but we aren't in big trouble yet.)”

    慢速消耗状况适合较长的回溯期,可以消除短时消耗的变化。

    您在此处设置的消耗率阈值提醒高于回溯期的理想基准值,但无显著差异。如果消耗量长期趋于平稳,则基于较短回溯期(具有高阈值)的政策可能会生成过多提醒。但如果消耗量长时间保持稍高的水平,最终会消耗完所有错误预算。

创建 SLO 提醒:API

系统会基于检索 SLO 数据中说明的时间序列选择器 select_slo_burn_rate 发出有关错误预算消耗率的提醒政策。还有其他时间序列选择器,您可以将其中一些用作提醒政策的基础。

您可以使用 alertPolicies.create 方法创建提醒政策。管理提醒政策中介绍了此方法的一般用法。

SLO 的提醒政策在许多方面都与其他提醒政策类似:它们都使用指标阈值条件来提醒政策。而 SLO 的提醒政策区别于其他提醒政策的一个独特之处是:filter(位于条件的 MetricThreshold 规范中)使用时间序列选择器,而不使用一对指标和受监控的资源类型。

基于 SLO 的提醒政策的条件

一项提醒策略必须至少包含一个条件。对于基于 SLO 的条件,请使用 [MetricThreshold] 类型的条件。

指标阈值条件可以包含两对时间序列配置:filteraggregations,而构建比率包含 denominatorFilterdenominatorAggregations。由于未使用标准监控过滤器检索 SLO 数据,因此 SLO 条件唯一使用的字段是 filter

SLO 条件要设置 comparisonthresholdValuedurationtrigger 字段。

此示例创建了一则条件,当消耗率超过正常比率 2 倍时会违反该条件。该结构如下所示:

  "conditions": [
    {
      "displayName":"SLO burn rate alert for ${SLO_ID} exceeds 2",
      "conditionThreshold": {
        "filter": [TO_BE_DETERMINED],
        "comparison":"COMPARISON_GT",
        "thresholdValue": 2,
        "duration": {
          "seconds":"0",
        },
      },
    }
  ],

要设置 filter 字段,您需要特定 SLO 的资源名称。该值的格式为 projects/${PROJECT}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}。如需了解查找 SLO ID 的信息,请参阅列出 SLO

要针对消耗率创建提醒,请使用时间序列选择器 select_slo_burn_rate。此选择器采用两个值:目标 SLO 和回溯期。如需了解详情,请参阅 select_slo_burn_rate

例如,以下过滤器可获取回溯期为 1 小时的目标 SLO 的消耗率:

"filter":"select_slo_burn_rate(\"projects/${PROJECT}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}\", \"60m\")"

提醒政策的其余部分

要完成提醒政策,请为其余字段指定值:

  • displayName:提醒政策的说明。
  • combiner:描述组合条件的逻辑。此政策只有一个条件,因此要么使用 AND,要么使用 OR
  • notificationChannels:触发提醒政策时要使用的一系列现有通知渠道。如需了解如何查找和创建通知渠道,请参阅通知渠道
  • documentation:违反条件时发送的信息,帮助收件人诊断问题。如需了解详情,请参阅 Documentation

创建提醒政策

以下示例使用 API 创建了一个消耗率提醒政策。 如需了解如何列出、修改和删除提醒政策,请参阅通过 API 管理提醒政策

协议

要使用 curl 创建提醒政策,请将 POST 消息发送到 https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/alertPolicies 端点,并在请求正文中提供提醒政策。请求正文中的 JSON 描述了一个提醒政策,该政策使用的阈值条件以回溯期为 1 小时的 select_slo_burn_rate 时间序列选择器为基础。

  1. 创建一个变量以保存请求正文:

    CREATE_ALERT_POST_BODY=$(cat <<EOF
    {
      "displayName":"SLO burn-rate alert for ${SLO_ID} with a threshold of 2",
      "combiner":"AND",
      "conditions": [
        {
          "displayName":"SLO burn rate alert for ${SLO_ID} exceeds 2",
          "conditionThreshold": {
            "filter":"select_slo_burn_rate(\"projects/${PROJECT}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}\", \"60m\")",
            "comparison":"COMPARISON_GT",
            "thresholdValue": 2,
            "duration": {
              "seconds":"0",
            },
          },
        }
      ],
      "notificationChannels": ["${NOTIFICATION_CHANNEL}", ],
      "documentation": {
         "content": "SLO burn for the past 60m exceeded twice the acceptable budget burn rate.",
         "mime_type": "text/markdown",
      },
    }
    EOF
    )
    
  2. 将请求发布到端点:

    curl  --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_ALERT_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/alertPolicies
    

使用控制台创建基于 SLO 的提醒政策

如需了解 Anthos 服务网格中基于 SLO 的提醒政策,请参阅 Anthos 服务网格文档:为 SLO 创建提醒政策