创建服务等级指标

如果要创建自定义服务,您还必须为其创建服务等级目标 (SLO)。自定义服务没有预定义的 SLO。

您还可以为自动检测到的服务创建自定义 SLO,但这种情况并不常见。

SLO 基于衡量性能的指标构建,这些指标被用作服务等级指标 (SLI)。对于自定义 SLO,您必须确定要在 SLI 中使用的指标。

如果您不需要创建自定义 SLO,则可以跳过此页面。

适合的指标类型的特征

您可以为服务创建两种类型的 SLO:

  • 基于请求的 SLO。
  • 基于窗口的 SLO。

SLO 基于您选择作为 SLI 的指标类型构建。指标类型中的值按照它们之间的关系进行分类。此分类被称为指标种类,它有三个可能的值:GAUGEDELTA,CUMULATIVE。如需了解详情,请参阅 MetricKind

对于基于请求的 SLO,SLI 表示良好请求与总请求的比率。您的 SLI 的指标种类必须是 DELTACUMULATIVE。您不能在基于请求的 SLI 中使用 GAUGE 指标。

对于基于窗口的 SLO,您的 SLI 表示给定时间段内良好结果的数量。可接受的指标种类取决于您如何建立 SLI 的结构。但是,如果您使用基于请求的 SLI,则 SLI 的指标种类必须是 DELTACUMULATIVE。您不能在基于请求的 SLI 中使用 GAUGE 指标。如需了解详情,请参阅基于窗口的 SLI 的结构

如需详细了解 SLO 类型,请参阅服务监控中的概念

您可以使用 Cloud Monitoring 提供的指标类型,也可以使用自己创建的自定义指标类型。在这两种情况下,这些值都适用于您要创建的 SLI。

指标类型不合适

在考虑将指标类型用作 SLI 时,请避免使用高基数指标类型。基数描述了可能与指标类型关联的可能时间序列数量,并且与指标标签可以采用的值的粒度相关。如需了解有关基数的讨论,请参阅基数:时间序列和标签

含有时间戳等值的标签的指标类型可能具有较高的基数,并且不适合用作 SLI。 基数高的指标通常是用户定义的指标,不是为避免基数问题而设计的。这些指标可能包括用户定义的基于日志的指标自定义指标

查找合适的指标类型

您可以在多个位置找到有关指标类型的信息(包括指标种类):

  • Metrics Explorer 等工具中使用的指标选择器会为突出显示的指标类型显示一个悬停卡片。此工具适用于自定义指标和内置指标。

    例如,以下屏幕截图显示了 Metrics Explorer 中指标类型 loadbalancing.googleapis.com/https/request_count 的悬停卡片:

    Metrics Explorer 中的一个负载平衡指标,其悬停卡片显示指标种类。

    借助 Metrics Explorer,您还可以配置指标以模拟 SLO API 的功能,并且可以获取该配置的 JSON 表示法。此 JSON 在手动创建 SLI 时很有用。

  • 指标列表中的页面包含每种服务的表格,其中详细说明了与各种服务关联的指标类型。这些表格包含所有内置指标类型,但不显示自定义指标类型。

    例如,以下屏幕截图显示了负载平衡指标列表中指标类型 loadbalancing.googleapis.com/https/request_count 的条目。这些条目通常比 Metrics Explorer 中的悬停卡片提供更多详细信息。

    参考表中的负载平衡指标。

构建 SLI

对于服务监控,指标数据以特定方式处理,您可以在 Metrics Explorer 中进行复制。本页面假定您熟悉 Metrics Explorer 的用法。如需了解详情,请参阅 Metrics Explorer

要根据时间序列比率构建基于请求的 SLI,您需要两个时间序列:一个代表所有请求,另一个代表良好(或错误)请求。此类型的 SLI 具有以下结构:

  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": TO_BE_IDENTIFIED,
      "goodServiceFilter": TO_BE_IDENTIFIED,
    }
  }

要获取 goodServiceFilter 字段的值,请执行以下操作:

  1. 选择受监控的资源类型和指标类型。请记住,指标种类必须为 DELTACUMULATIVE。结果可能包含许多不同的时间序列。

    例如,选择 http_lb_rule 资源类型和 loadbalancing.googleapis.com/https/request_count 指标类型。

  2. 使用过滤条件字段将标签 response_code_class 设置为 200。 此过滤条件会移除此标签的其他值的所有时间序列。此时可能仍然存在多个匹配的时间序列。

  3. 选择 sum 聚合器以创建单个时间序列。Metrics Explorer 页面上的图表会显示生成的时间序列。

  4. 点击图表上方的更多选项 ,然后从菜单中选择 View as JSON

    检索到的 JSON 如下所示:

    "dataSets": [
      {
        "timeSeriesFilter": {
          "filter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200""
          "perSeriesAligner": "ALIGN_RATE",
          "crossSeriesReducer": "REDUCE_SUM",
          "secondaryCrossSeriesReducer": "REDUCE_NONE",
          "minAlignmentPeriod": "60s",
          "groupByFields": [],
          "unitOverride": "1"
        },
        "targetAxis": "Y1",
        "plotType": "LINE"
      }
    ],
    

您需要的内容是嵌入在 dataSets 对象中的 filter 字段的值:

"filter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200""

要构建 SLI 结构,请执行以下操作:

  1. 将此值作为 goodServiceFilter 字段的值插入 SLI 结构。

  2. 同时将该值作为 totalServiceFilter 的值插入 SLI 结构,并移除该过滤条件的标签部分 metric.label.\"response_code_class\"=\"200\"

生成的服务等级指标如下所示:

  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule"",
      "goodServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200"",
    }
  }

然后,您可以将此 SLI 插入到 SLO 中,例如:

{
   "serviceLevelIndicator": {
      "requestBased": {
        "goodTotalRatio": {
          "totalServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule"",
          "goodServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200"",
        }
     }
   },
   "goal": 0.98,
   "calendarPeriod": "WEEK",
   "displayName": "98% Successful requests in a calendar week"
}

您可以使用此 JSON 创建 SLO,如创建 SLO中所述。