本页面介绍了有关如何在 Cloud Monitoring 中为可用性和延迟时间 SLI 使用 Prometheus 指标以及如何使用这些指标来创建 SLO 的基础知识。
Prometheus 基础知识
Prometheus 是一种领先的开源监控解决方案,用于指标和提醒。
Prometheus 支持将维度数据与指标的键值标识符结合使用,提供 PromQL 查询语言,并通过为其他产品提供导出器来支持多项集成。
若想开始将 Prometheus 与 Monitoring 搭配使用,建议您使用 Google Cloud Managed Service for Prometheus。
指标
Prometheus 支持以下类型的指标:
- 计数器:重启时只能单调递增或重置为 0 的单个值。
- 刻度盘:可以任意设置的单个数值。
- 直方图:一组可配置的分桶,用于对观测值进行采样和记录范围内的值;还提供了所观测到的所有值的总和
- 总结:与直方图一样,但它还会计算一段滑动时间范围内的可配置分位数。
如需了解详情,请参阅指标类型。
为 SLI 创建指标
如果您的应用发出 Prometheus 指标,您可以将这些指标用于 SLI。
- 对于针对请求和错误计数的可用性 SLI,您可以从使用 Prometheus 计数器指标开始。
- 对于延迟时间 SLI,您可以使用 Prometheus 直方图或摘要指标。
如需使用 Google Cloud Managed Service for Prometheus 收集 Prometheus 指标,请参阅介绍如何设置代管式或自部署指标的收集功能的相关文档。
如果您是在 Google Cloud 控制台中创建 SLO,则默认的可用性和延迟时间 SLO 类型将不包含 Prometheus 指标。如需使用 Prometheus 指标,请创建自定义 SLO,然后为 SLI 选择所需的 Prometheus 指标。
Prometheus 指标以 prometheus.googleapis.com/
开头。
GKE 的指标
GKE 会默认启用通过 Google Cloud Managed Service for Prometheus 收集代管式指标的功能。如果您在默认不启用代管式收集的 GKE 环境中运行,则可手动启用代管式收集。启用代管式收集后,集群内组件会运行,但在您部署 PodMonitoring 资源来抓取有效指标端点或启用某一代管式指标包之前,系统不会生成指标。
控制平面指标包中提供了一些有用的指标来指示系统健康状况。启用控制平面指标的收集功能,以将这些指标用于可用性、延迟时间和其他 SLI。
- 使用 API 服务器指标跟踪 API 服务器负载、返回错误的 API 服务器请求所占的比例,以及 API 服务器收到的请求的响应延迟时间。
- 可使用调度器指标在没有足够的资源来处理待处理的 Pod 时主动对调度问题做出响应。
可用性 SLI 的指标
您可以通过使用 TimeSeriesRatio
结构设置“正常”或“错误”请求数与请求总数的比率,在 Cloud Monitoring API 中表示基于请求的可用性 SLI。此比率用于 RequestBasedSli
结构的 goodTotalRatio
字段。
您的应用必须发出可用于构造此比率的 Prometheus 指标。应用必须至少发出以下两项指标:
统计事件总数的指标;此指标用于比率的
totalServiceFilter
。您可以使用一个针对每个事件递增的 Prometheus 计数器。
统计“错误”事件数的指标,此指标用于比率的
badServiceFilter
。您可以使用一个针对每个错误或其他“错误”事件递增的Prometheus 计数器。
统计“正常”事件数的指标,此指标用于比率的
goodServiceFilter
。您可以使用一个针对每个成功事件或其他“正常”事件递增的 Prometheus 计数器。
延迟时间 SLI 的指标
您可以通过创建 DistributionCut
结构,在 Cloud Monitoring API 中表示基于请求的延迟时间 SLI。此结构用于 RequestBasedSli
结构的 distributionCut
字段。
您的应用必须发出可用于构造分布缩减值的 Prometheus 指标。为此,您可以使用 Prometheus 直方图或摘要。如需了解如何定义分桶来精确衡量响应是否在 SLO 范围内,请参阅 Prometheus 文档中的指标类型。
示例
以下 JSON 示例使用 GKE 控制平面指标 prometheus.googleapis.com/apiserver_request_duration_seconds
来为服务创建延迟时间 SLO。该 SLO 要求在一个日历月内有 98% 的响应的延迟时间小于 50 秒。
{
"displayName": "98% Calendar month - Request Duration Under 50s",
"goal": 0.98,
"calendarPeriod": "MONTH",
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter": "metric.type=\"prometheus.googleapis.com/apiserver_request_duration_seconds/histogram\" resource.type=\"prometheus_target\"",
"range": {
"min": "-Infinity",
"max": 50
}
}
}
}
}