API 中的构造

Service Monitoring API 用于设置可用于监控服务运行状况的服务等级目标 (SLO)。

Service Monitoring 可将以下资源添加到 Monitoring API 中:

本页面介绍了用于在 Service Monitoring API 中表示服务和 SLO 的结构,并将它们映射到服务监控的概念中概要介绍的概念。

有关调用 API 的信息,请参阅使用 API

服务

服务由 Service 对象表示。此对象包含以下字段:

  • 名称:此服务的完全限定资源名称
  • 显示名:在控制台组件中使用的标签
  • 遥测配置对象
  • 服务类型的指示符:
    • App Engine 服务
    • Cloud Endpoints 服务
    • Google Kubernetes Engine 上的 Istio 服务
    • 自定义服务

您手动创建的唯一服务类型是自定义服务。系统会根据您的环境自动检测其他类型。

例如,以下显示了 Istio 服务的 JSON 表示法:

    {
      "name": "projects/[PROJECT_NUMBER]/services/[PROJECT_ID]-zone-us-central1-c-csm-main-default-currencyservice",
      "displayName": "[PROJECT_ID]/us-central1-c/csm-main/default/currencyservice",
      "clusterIstio": {
        "location": "us-central1-c",
        "clusterName": "csm-main",
        "serviceNamespace": "default",
        "serviceName": "currencyservice"
      },
      "telemetry": {
        "resourceName": "//container.googleapis.com/projects/[PROJECT_ID]/zones/us-central1-c/clusters/csm-main/k8s/namespaces/default/services/currencyservice"
      }
    }
    

此示例显示了自定义服务的 JSON 表示法:

    {
      "name": "projects/[PROJECT_NUMBER]/services/-I6P_NufSzKiuvX1AYHE6Q",
      "displayName": "My Test Service",
      "custom": {},
      "telemetry": {}
    }
    

遥测正在开发中。唯一有意义的值是定义服务的资源的完整名称。资源名称中介绍了该格式。

服务等级指标

服务等级指标 (SLI) 可以衡量服务的性能。SLI 基于服务捕获的指标。SLI 的具体定义方式取决于用作指标指示符的指标类型,但通常是可接受结果与总结果之间的一些比较。

SLI 由 ServiceLevelIndicator 对象表示。此对象是一个统一称呼,它包括三种受支持的 SLI 类型:

  • 基本 SLI 是针对常见的服务类型自动创建的。服务等级目标中介绍了这一类型的 SLI;它由 BasicSli 对象表示,测量可用性或延迟时间。

  • 基于请求的 SLI 可用于计算代表可接受服务的事件。基于请求的 SLO 中介绍了此类 SLI 的用法。它由 RequestBasedSli 对象表示。

  • 基于窗口的 SLI 可用于计算满足某个良好标准的时间段。基于窗口的 SLO 中介绍了此类 SLI 的用法;它由 WindowsBasedSli 对象表示。

例如,以下显示了基本可用性 SLI:

    {
      "basicSli": {
        "availability": {},
        "location": [
          "us-central1-c"
        ]
      }
    }
    

基于请求的 SLI 的结构

基于请求的 SLI 使用的指标以服务单元为单位,计算特定结果与总结果之间的比率。例如,如果您使用一个计算请求数量的指标,则可以构建返回成功的请求数与请求总数之间的比率。

您可以通过以下两种方法构建基于请求的 SLI:

  • 当良好服务与总服务的比率是根据两个时间序列计算,并且这些时间序列的值具有指标类型 DELTACUMULATIVE 时,构建为 TimeSeriesRatio
  • 当时间序列的值类型为 DISTRIBUTION 且其值具有指标类型 DELTACUMULATIVE 时,构建为 DistributionCut。良好服务值是指在指定范围内落入直方图分区的项的数量,而总数是分布中所有值的数量。

以下显示了使用时间序列比率的 SLI 的 JSON 表示法:

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

该比率中的时间序列由一对受监控的资源类型和指标类型确定:

  • 资源:https_lb_rule
  • 指标类型:loadbalancing.googleapis.com/https/request_count

totalServiceFilter 的值由这一对指标和资源类型表示。goodServiceFilter 的值由同一对指标和资源类型表示,但某些标签具有特定值;在本例中,当 response_code_class 标签的值为 200 时。

过滤条件之间的比率测量的是返回 2xx HTTP 状态的请求数量与请求总数的比率。

以下显示了使用分布缩减的 SLI 的 JSON 表示法:

    {
      "requestBased": {
        "distribution_cut": {
          "distribution_filter": "resource.type=https_lb_rule  metric.type="loadbalancing.googleapis.com/https/backend_latencies" metric.label.response_code_class=200",
          "range": {
            "min": "-Infinity",
            "max": 500.0
          }
        }
      }
    }
    

时间序列由受监控的资源类型、指标类型和指标标签值确定:

  • 资源:https_lb_rule
  • 指标类型:loadbalancing.googleapis.com/https/backend_latencies
  • 标签值对:response_code_class = 200

被视为良好的延迟时间范围由 range 字段指定。此 SLI 计算延迟时间低于 500 的 2xx 类响应占所有 200 类响应的延迟时间的比率。

基于窗口的 SLI 的结构

基于窗口的 SLI 计算所提供服务被视为良好服务的时间窗口。良好服务的标准是 SLI 定义的一部分。

所有基于窗口的 SLI 都包含一个窗口期,即 60-86400 秒(1 天)。

您可以通过以下两种方式为基于窗口的 SLI 指定良好服务的标准:

  • 根据 [Monitoring 过滤条件][monfilters]中的说明创建过滤条件字符串,该过滤条件将返回具有布尔值的时间序列。如果窗口的值是 true,则该窗口是良好的。此过滤条件称为 goodBadMetricFilter
  • 创建 [PerformanceThreshold][sli-perthreshold-apiref] 对象,该对象表示可接受性能的阈值。此对象被指定为 goodTotalRatioThreshold 的值。

    PerformanceThreshold 对象指定阈值和性能 SLI。如果性能 SLI 的值达到或超过阈值,则该时间窗口将被计为良好。

    您可以通过以下两种方式指定性能 SLI:

    • 指定为 basicPerformanceSli 字段中的 BasicSli 对象。
    • 指定为 performance 字段中的 RequestBasedSli 对象。

以下显示了一个基于窗口的 SLI 的 JSON 表示法,该 SLI 基于基本可用性 SLI 的性能阈值构建:

    {
      "windowsBased": {
         "goodTotalRatioThreshold": {
           "threshold": 0.9,
           "basicSliPerformance": {
             "availability": {},
             "location": [
               "us-central1-c"
             ]
           }
         },
         "windowPeriod": "300s"
       }
    }
    

该 SLI 指定的良好性能标准为:在 5 分钟的时间窗口内可用性达到 90% 或更高。服务等级指标中介绍了基本 SLI 的结构。

您还可以在基于窗口的 SLI 中嵌入基于请求的 SLI。如需详细了解嵌入式结构,请参阅基于请求的 SLI 的结构

服务等级目标

服务等级目标 (SLO) 由 ServiceLevelObjective 对象表示。此对象包含以下字段:

以下显示了一个 SLO 的 JSON 表示法,该 SLO 使用基本可用性 SLI 作为 serviceLevelIndicator 字段的值:

    {
       "name": "projects/[PROJECT_NUMBER]/services/[PROJECT_ID]-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ",
       "serviceLevelIndicator": {
         "basicSli": {
           "availability": {},
           "location": [
             "us-central1-c"
           ]
         }
       },
       "goal": 0.98,
       "calendarPeriod": "WEEK",
       "displayName": "98% Availability in Calendar Week"
    }
    

此 SLO 将性能目标设置为在一周的时间段内达到 98% 的可用性。