服务级别目标(SLO)配置示例

示例1:包含延迟蓝图的应用程序服务层目标

目标: 确保在固定的一周时间内,"机器人商店"应用程序90%的调用平均延迟优于100毫秒。

SLO的配置如下:

  • 实体:机器人商店应用程序

    • 作用域:
    • 边界:所有服务
    • 包含内部调用:false
    • 包含合成调用:false
    • 服务:所有服务
    • 终端点:所有终端点
  • 指示符:

    • 蓝图:延迟
    • 类型:时间
    • 聚合:平均值
    • 阈值:100 毫秒
  • 目标:

    • SLO目标:90%
    • 时间窗口类型:滚动
    • 时间窗口长度:1周

场景 :假设服务层目标(SLO)在为期一周的SLO时间窗口内( 自2025-03- 04起)存在400分钟异常时段(即400分钟内平均延迟超过100毫秒):

该SLO的误差预算将按以下方式计算:

  • 时间段x中的分钟数 × (1 - SLO目标百分比)
    • 时间窗口总分钟数:1周内24×60×7分钟=10080分钟
    • SLO目标百分比:90%( 0.9 )
    • 误差预算:10080 × (1 - 0. 0.9 ) = 1008 分钟

SLO状态将按以下方式计算:

  • SLO状态 = 100% × (时间窗口内总分钟数 - 时间窗口内异常分钟数) / 时间窗口内总分钟数
    • 100% × (10080总分钟数 - 400无效分钟数) / 10080总分钟数 = 96.03 %

示例 2:基于事件的可用性蓝图的网站 SLO

目标: 确保在2025年3月1日开始的固定4天周期内,对演示网站购物车页面( cart.html )的 HTTP 请求能达到95%的可用性。

SLO的配置如下:

  • 实体:演示网站
    • 信标: HTTP 请求
    • 自定义筛选器:位置 > 页面名称 = 购物车
  • 指示符:
    • 蓝图:可用性
    • 类型:事件计数(正确判断与错误判断的总计数)
  • 目标:
    • SLO目标:95%
    • 时间窗口类型:固定
    • 时间窗口长度:4天
    • 开始时间:2025年3月1日 0:00

场景 :假设在2025年3月1日开始的SLO时间窗口内,存在234次成功的 HTTP 请求和11次失败的 HTTP 请求:

该SLO的误差预算将按以下方式计算:

  • 活动:
    • 有效事件计数:234个信标
    • 不良事件计数:11个信标
    • 总事件计数:234 + 11 = 245 个信标
    • SLO目标百分比:95%( 0.95 )
    • 误差预算:245 × (1 - 0.95 ) = 12 个信标
    • 剩余错误预算:12 - 11 = 1 个信标
    • 剩余误差预算百分比:100% * (12 - 11) / 12 = 8.33 %

SLO状态将按以下方式计算:

  • SLO状态 = 100% × 时间窗口内有效事件总数 / 时间窗口内事件总数
    • 100% × 234 个信标 / 245 个信标 = 95.5 %

示例 3:基于流量蓝图的合成监控

目标: 确保在2025年3月18日开始的固定周期内,每分钟运行3次合成监控测试(购物车、首页和产品列表页),测试频率需稳定维持在99%以上。

SLO的配置如下:

  • 实体:

    • 购物车测试
    • 主页测试
    • 产品列表页面测试
  • 指示符:

    • 蓝图:流量
    • 阈值:> 每分钟15个结果
  • 目标:

    • SLO目标:99%
    • 时间窗口类型:固定
    • 时间窗口长度:1周
    • 开始时间:2025年3月18日 0:00

场景 :假设SLO 在2025-03-18 开始的SLO时间窗口内,存在21分钟期间合成测试运行次数少于15次的情况:

该SLO的误差预算将按以下方式计算:

  • 时间段x中的分钟数 × (1 - SLO目标百分比)
    • 总分钟数:1周内24×60×7分钟=10080分钟
    • SLO目标百分比:99%( 0.99 )
    • 误差预算:10080 × (1 - 0. 0.99 ) = 101分钟
    • 剩余容差:101 - 21 = 80
    • 剩余误差预算百分比:100% * (101 - 21) / 101 = 79.21 %

SLO状态将按以下方式计算:

  • SLO状态 = 100% × (时间窗口内总分钟数 - 时间窗口内异常分钟数) / 时间窗口内总分钟数
    • 100% × (10080总分钟数 - 21无效分钟) / 10080总分钟数 = 99.8 %

示例 4:使用标签过滤器基于事件的可用性进行合成监控 SLO

目标: 确保在为期1天的固定时间内,合成结账流程测试的可用性至少达到99%。

SLO的配置如下:

  • 实体:合成
  • 作用域:
    • 筛选方法:基于筛选条件
    • 标签过滤表达式: synthetic.testName startsWith "checkout"
  • 指示符:
    • 蓝图:可用性
    • 类型:事件计数(良好测试结果与不良测试结果的总数)
    • 良好事件: call.erroneous = false
    • 错误事件: call.erroneous = true
  • 目标:
    • SLO目标:99%
    • 时间窗口类型:固定
    • 时间窗口长度:1天
    • 开始时间:2026年1月18日 0:00

场景 :假设在始于 2026-01-18 的 SLO 时间窗口内,共有 14,850 次成功的合成测试执行和 150 次失败的执行。

该SLO的误差预算将按以下方式计算:

  • 活动:
    • 有效事件数:14,850 次测试执行
    • 失败事件计数:150次测试执行
    • 事件总数:14,850 + 150 = 15,000 次执行
    • SLO目标百分比:99%( 0.99 )
    • 误差预算:15,000 × (1 − 0.99 ) = 150 次执行
    • 剩余误差预算:150 − 150 = 0 次执行
    • 剩余误差预算百分比:100% × (0 / 150) = 0%

SLO状态将按以下方式计算:

  • SLO 状态 = 100% × 正常事件总数 / 事件总数
    • 100% × 14,850 / 15,000 = 99%

示例 5:使用自定义蓝图的应用 SLO

目标: 确保在1天滚动周期内,"机器人商店"应用程序98%的调用不会返回 HTTP 状态码400。

SLO的配置如下:

  • 实体:机器人商店应用程序

    • 作用域:
    • 边界:所有服务
    • 包含内部调用:false
    • 包含合成调用:false
    • 服务:所有服务
    • 终端点:所有终端点
  • 指示符:

    • 蓝图:定制
    • 类型:事件计数(正确判断与错误判断的总计数)
    • 良好过滤器: HTTP 状态码 ≠ 400
    • 错误过滤器: HTTP 状态码 = 400
  • 目标:

    • SLO目标:98%
    • 时间窗口类型:滚动
    • 时间窗口长度:1天

场景 :假设在2025年3月10日开始的为期一天的SLO时间窗口内,该SLO共处理了25000通有效通话和200通无效通话:

该SLO的误差预算将按以下方式计算:

  • 活动:
    • 有效事件计数:25000次调用
    • 不良事件计数:200次呼叫
    • 总事件计数:25000 + 200 = 25200 次调用
    • SLO目标百分比:98%( 0.98 )
    • 误差预算:25200 × (1 - 0. 0.98 ) = 504 次调用
    • 剩余错误预算:504 - 200 = 304 次调用
    • 剩余误差预算百分比:100% * (504 - 200) / 504 = 60.32 %

SLO状态将按以下方式计算:

  • SLO状态 = 100% × 时间窗口内有效事件总数 / 时间窗口内事件总数
    • 100% × 25000 次呼叫 / 25200 次呼叫 = 99.2 %

示例 6:基于事件的延迟蓝图的应用 SLO

目标: 确保在固定的两周周期内,"机器人商店"应用程序92%的呼叫延迟优于100毫秒。

SLO的配置如下:

  • 实体:机器人商店应用程序

    • 作用域:
    • 边界:所有服务
    • 包含内部调用:false
    • 包含合成调用:false
    • 服务:所有服务
    • 终端点:所有终端点
  • 指示符:

    • 蓝图:延迟
    • 类型:事件计数(正确判断与错误判断的总计数)
    • 判断正确:延迟 < 100 毫秒
    • 错误判断:延迟 ≥ 100 毫秒
  • 目标:

    • SLO目标:92%
    • 时间窗口类型:固定
    • 时间窗口长度:2周
    • 开始时间:2025年3月10日 0:00

场景 :假设在从2025年3月10日开始的为期两周的SLO时间窗口内,SLO系统共处理了50000次有效呼叫和1000次无效呼叫:

该SLO的误差预算将按以下方式计算:

  • 活动:
    • 有效事件计数:50000次调用
    • 不良事件计数:1000次呼叫
    • 总事件计数:50000 + 1000 = 51000 次调用
    • SLO目标百分比:92%( 0.92 )
    • 误差预算:51000 × (1 - 0. 0.92 ) = 4080 次调用
    • 剩余错误预算:4080 - 1000 = 3080 次调用
    • 剩余误差预算百分比:100% * (4080 - 1000) / 4080 = 75.49 %

SLO状态将按以下方式计算:

  • SLO状态 = 100% × 时间窗口内有效事件总数 / 时间窗口内事件总数
    • 100% × 50000 次呼叫 / 51000 次呼叫 = 98.04 %

示例 7:基于时间可用性蓝图的网站 SLO

目标: 确保在滚动周期为3天内, HTTP 对Demo网站的请求能达到92%的可用性,且错误率低于5%。

SLO的配置如下:

  • 实体:演示网站
    • 信标: HTTP 请求
  • 指示符:
    • 蓝图:可用性
    • 类型:时间
    • 错误率阈值:5%
  • 目标:
    • SLO目标:92%
    • 时间窗口类型:滚动
    • 时间窗口长度:3天

场景 :假设SLO在为期3天的SLO时间窗口内(自 2025-03- 05起)存在200分钟异常时段(即200分钟的平均误差率超过5%):

该SLO的误差预算将按以下方式计算:

  • 时间段x中的分钟数 × (1 - SLO目标百分比)
    • 时间窗口总分钟数:3天内24×60×3分钟=4320分钟
    • SLO目标百分比:92%( 0.92 )
    • 误差预算:4320 × (1 - 0. 0.92 ) = 346 分钟

SLO状态将按以下方式计算:

  • SLO状态 = 100% × (时间窗口内总分钟数 - 时间窗口内异常分钟数) / 时间窗口内总分钟数
    • 100% × (4320总分钟数 - 200无效分钟数) / 4320总分钟数 = 95.37 %

示例 8:基于时间饱和度的基础设施 SLO 蓝图(CPU)

目标: 确保生产主机在7天滚动周期内,99%的时间内CPU利用率保持在75%以下。

SLO的配置如下:
  • 实体:基础设施
    • 基础设施类型:主机
    • 标签过滤器表达式: availabilityZone = "us-east-1"
  • 指示符:
    • 蓝图:饱和度
    • 类型:时间
    • 度量: cpu.used
    • 聚合:平均值
    • 运算符:≥
    • 阈值:75%
  • 目标:
    • SLO目标:99%
    • 时间窗口类型:滚动
    • 时间窗口长度:7天
场景 :假设该服务级别目标(SLO)在7天SLO时间窗口内( 自2025-03-15 起)存在25分钟异常(即25分钟内平均CPU使用率≥75%),则该SLO 的容差预算计算方式如下:
  • 时间段x中的分钟数 × (1 - SLO目标百分比)
    • 时间窗口总分钟数:1周内24×60×7分钟=10080分钟
    • SLO目标百分比:99%( 0.99 )
    • 误差预算:10080 × (1 - 0. 0.99 ) = 101分钟
SLO状态将按以下方式计算:
  • SLO状态 = 100% × (时间窗口内总分钟数 - 时间窗口内异常分钟数) / 时间窗口内总分钟数
    • 100% × (10080总分钟数 - 25无效分钟) / 10080总分钟数 = 99.75 %

示例 9:基于事件的饱和蓝图的基础设施 SLO(内存)

目标: 确保数据库服务器内存使用率在1天滚动周期内, 99.9 %的指标快照中保持低于85%。

SLO的配置如下:
  • 实体:基础设施
    • 基础设施类型:主机
    • 标签过滤器表达式: host.fqdn contains "company-name" AND availabilityZone = "us-east-1"
  • 指示符:
    • 蓝图:饱和度
    • 类型:事件计数(良好指标快照与不良指标快照的总计数)
    • 度量: memory.used
    • 运算符:≥
    • 阈值:85%
  • 目标:
    • SLO 目标: 99.9 %
    • 时间窗口类型:滚动
    • 时间窗口长度:1天
场景 :假设在2025-03-20 开始的SLO时间窗口内,存在8,640个良好指标快照(内存<85%)和5个不良指标快照(内存≥85%):该SLO的容错预算将按以下方式计算:
  • 活动:
    • 优质活动计数:8,640张快照
    • 不良事件计数:5次快照
    • 总事件计数:8,640 + 5 = 8,645 个快照
    • SLO目标百分比: 99.9 %( 0.999 )
    • 误差预算:8,645 × (1 - 0. 0.999 ) = 8.65 个快照(四舍五入为9)
    • 剩余错误预算:9 - 5 = 4 个快照
    • 剩余误差预算百分比:100% * (9 - 5) / 9 = 44.44 %
SLO状态将按以下方式计算:
  • SLO状态 = 100% × 时间窗口内有效事件总数 / 时间窗口内事件总数
    • 100% × 8,640 个快照 / 8,645 个快照 = 99.94 %

示例 10:针对 Kubernetes 集群的自定义蓝图的基础设施 SLO

目标: 确保生产环境的 Kubernetes 集群在7天滚动周期内, 99.9 %的时间内至少保持6个可用节点。

SLO的配置如下:
  • 实体:基础设施
    • 基础设施类型: Kubernetes 集群
    • 标签过滤器表达式: kubernetes.cluster.name = "prod-cluster"
  • 指示符:
    • 蓝图:定制
    • 类型:事件计数(良好指标快照与不良指标快照的总计数)
    • 良好事件: nodes.count >= 6
    • 不良事件: nodes.count <6
  • 目标:
    • SLO 目标: 99.9 %
    • 时间窗口类型:滚动
    • 时间窗口长度:7天
场景 :假设在为期7天的SLO时间窗口(起始于 2025-04-01:The )内,存在60,400个良好事件(指标快照中节点数≥6)和80个不良事件(指标快照中节点数<6), 该SLO的错误预算计算如下:
  • 活动:
    • 优质事件计数:60,400张快照
    • 不良事件计数:80个快照
    • 总事件计数:60,400 + 80 = 60,480 个快照
    • SLO目标百分比: 99.9 %( 0.999 )
    • 误差预算:60,480 × (1 - 0. 0.999 ) = 60.48 个快照(四舍五入为60)
    • 剩余容差:60 - 80 = -20 个快照(超出限制)
    • 剩余容差百分比:100% × (-20 / 60) = -33.33 %(超额消耗)
SLO状态将按以下方式计算:
  • SLO状态 = 100% × 时间窗口内有效事件总数 / 时间窗口内事件总数
    • 100% × 60,400 张快照 / 60,480 张快照 = 99.87 %

示例 11:带时区绑定的 SLO 行为

目标: 确保 SLO 时间窗口与日历时间一致,并且每天保持不变(即使在夏令时调整期间也是如此),以确保报告的准确性和一致性。 请确保 SLO 的计算与特定时区相关联,因为夏令时转换会根据配置的时区影响时间窗口。

SLO的配置如下:
  • 实体:机器人商店应用程序
    • 作用域:
      • 边界:所有服务
      • 包含内部调用:false
      • 包含合成调用:false
    • 服务:所有服务
    • 终端点:所有终端点
  • 指示符:
    • 蓝图:延迟
    • 类型:时间
    • 聚合:平均值
    • 阈值:100 毫秒
  • 目标:
    • SLO目标:90%
    • 时间窗口类型:固定
    • 时间窗口长度:3天
    • 绑定时区:启用
    • 时区:Europe/Berlin
场景 :用户有一个从 2025年3月29日开始的3天服务水平目标(SLO)。 该SLO与柏林夏令时转换期重叠。 其时间窗口应保持一致,每日的起止时间均应固定在相同的小时和分钟,包括 2025年3月30日夏令时变更发生时。

示例 12:与团队关联的学习成果目标

目标: 将该学习成果(SLO)分配给与该用户关联的一个或多个团队。 随后,这些团队关联将用于实施访问限制。

以下示例展示了具有团队关联的SLO配置:
  • 实体:机器人商店应用程序

    • 作用域:
      • 边界:所有服务
      • 包含内部调用:false
      • 包含合成调用:false
    • 服务:所有服务
    • 终端点:所有终端点
  • 指示符:

    • 蓝图:延迟
    • 类型:时间
    • 聚合:平均值
    • 阈值:100 毫秒
  • 目标:

    • SLO目标:90%
    • 时间窗口类型:滚动
    • 时间窗口长度:1周
  • 详细信息:

    • 名称:示例学习成果
    • 标签(可选):示例标签
    • 团队:团队1,团队2
场景 :用户被分配到团队1和团队2的SLO。 对应的团队标签在SLO表格和配置页面上可见。 切换至团队范围时,用户对该服务级别目标的查看权限将根据所选团队进行限制。

示例 13:月中创建的日历月 SLO

目标:确保在日历月期间,99%的"支付服务"应用程序调用平均延迟低于200毫秒,该服务水平目标(SLO)于1月15日创建。

SLO的配置如下:

  • 实体:支付服务应用程序
    • 作用域:
      • 边界:来电
      • 包含内部调用:false
      • 包含合成调用:false
    • 服务:所有服务
    • 终端点:所有终端点
  • 指示符:
    • 蓝图:延迟
    • 类型:时间
    • 聚合:平均值
    • 阈值:200 毫秒
  • 目标:
    • SLO目标:99%
    • 时间窗口类型:固定
    • 时间窗口长度:1个日历月
    • 绑定时区:启用
    • 时区:America/New_York
    • 开始时间:2025年1月15日 00:00

场景 :该SLO于2025年1月15日创建。 日历月SLO与月份边界一致,若在月中创建,则会形成部分的第一时段。

初始阶段(2025年1月15日至31日)
  • 时长:17天(1月15日至1月31日)
  • 总分钟数:17 × 24 × 60 = 24,480 分钟
  • 误差预算:24,480 × (1 - 0. 0.99 ) = 245 分钟
  • 记录的错误时间:30分钟
  • SLO状态:100% × (24,480 - 30) / 24,480 = 99.88 %
  • 剩余误差预算:245 - 30 = 215 分钟
第二阶段(2025年2月1日至28日)
  • 时长:28天(完整日历月)
  • 总分钟数:28 × 24 × 60 = 40,320 分钟
  • 误差预算:40,320 × (1 - 0. 0.99 ) = 403 分钟
  • 记录的错误时间:50分钟
  • SLO状态:100% × (40,320 - 50) / 40,320 = 99.88 %
  • 剩余容差:403 - 50 = 353 分钟
第三阶段(2025年3月1日至31日)
  • 时长:31天(完整日历月)
  • 总分钟数:31 × 24 × 60 = 44,640 分钟
  • 误差预算:44,640 × (1 - 0.99 ) = 446 分钟

示例 14:在当月第一天创建日历月 SLO

目标:确保 HTTP 对"电子商务网站"的请求在日历月期间达到95%的可用性,服务水平目标(SLO)于3月1日创建。

SLO的配置如下:

  • 实体:电子商务网站
    • 信标: HTTP 请求
    • 自定义过滤器:无
  • 指示符:
    • 蓝图:可用性
    • 类型:时间
    • 错误率阈值:5%
  • 目标:
    • SLO目标:95%
    • 时间窗口类型:固定
    • 时间窗口长度:1个日历月
    • 绑定时区:启用
    • 时区:UTC
    • 开始时间:2025年3月1日 00:00

场景 :该SLO创建于2025年3月1日(当月首日)。 所有测量周期均为完整的日历月。

第一阶段(2025年3月1日至31日)
  • 时长:31天(完整日历月)
  • 总分钟数:31 × 24 × 60 = 44,640 分钟
  • 误差预算:44,640 × (1 - 0. 0.95 ) = 2,232 分钟
  • 记录的无效分钟数:400分钟
  • SLO状态:100% × (44,640 - 400) / 44,640 = 99.10 %
  • 剩余误差预算:2,232 - 400 = 1,832 分钟
第二阶段(2025年4月1日至30日)
  • 时长:30天(完整日历月)
  • 总分钟数:30 × 24 × 60 = 43,200 分钟
  • 误差预算:43,200 × (1 - 0. 0.95 ) = 2,160 分钟
  • 记录的无效分钟数:350分钟
  • SLO状态:100% × (43,200 - 350) / 43,200 = 99.19 %
  • 剩余误差预算:2,160 - 350 = 1,810 分钟

示例 15:采用基于事件的延迟蓝图的移动应用 SLO(Android 版 HTTP 延迟)

本示例演示了如何配置一个移动应用 SLO,该 SLO 使用基于事件的延迟蓝图,以确保在 1 天的固定时间段内,来自 Android 设备发往购物车服务的 HTTP 请求中,99% 的请求延迟小于 200 毫秒。

配置

SLO 的配置如下:

  • 实体:移动应用
    • 筛选方法:基于筛选条件
    • 标签过滤表达式: mobileBeacon.platform EQUALS "Android"
  • 指示符:
    • 蓝图:延迟
    • 信标类型: HTTP 请求
    • Beacon 自定义过滤器: mobileBeacon.http.url EQUALS "https://rs-cart/add-cart"
    • 度量: httpLatency
    • 类型:事件计数(正常信标与异常信标的总计数)
    • 阈值:200 毫秒
    • 运算符:>
  • 目标:
    • SLO目标:99%
    • 时间窗口类型:固定
    • 时间窗口长度:1天
    • 时区:UTC
    • 开始时间:2026-02-18 00:00

方案分析

在从 2026-02-18 开始的 SLO 时间窗口内,共有 19,800 次延迟小于 200 毫秒的 HTTP 请求,以及 200 次延迟大于或等于 200 毫秒的 HTTP 请求。

误差预算计算

误差预算的计算方法如下:

  • 有效事件数:19,800 个信标
  • 异常事件计数:200 个信标
  • 事件总数:19,800 + 200 = 20,000 个信标
  • SLO目标百分比:99%( 0.99 )
  • 误差预算:20,000 × (1 - 0.99 ) = 200 个信标
  • 剩余误差预算:200 - 200 = 0 个信标
  • 剩余误差预算百分比:100% × (0 / 200) = 0%

SLO状态计算

SLO 状态的计算方法如下:

SLO 状态 = 100% × 时间窗口内合格事件总数 / 时间窗口内事件总数

100% × 19,800 个信标 / 20,000 个信标 = 99%

示例 16:采用基于时间的可用性蓝图的移动应用 SLO(受崩溃影响的会话)

本示例演示了如何配置一个移动应用 SLO,该 SLO 使用基于时间的可用性蓝图,以确保在固定的一日历月内,99% 的时间内,“零售”移动应用因崩溃而受影响的会话数保持在每分钟 15 次以下。

配置

SLO 的配置如下:

  • 实体:移动应用
    • 筛选方法:单个移动应用
    • 移动应用:零售移动应用
  • 指示符:
    • 蓝图:可用性
    • 信标类型:崩溃
    • 度量: crashAffectedSessionCount
    • 类型:基于时间
    • 聚合:SUM
    • 阈值:15
    • 运算符:>
  • 目标:
    • SLO目标:99%
    • 时间窗口类型:固定
    • 时间窗口长度:1个日历月
    • 时区:Europe/Dublin
    • 开始时间:2026-02-01 00:00

方案分析

在从 2026-02-01 开始的 SLO 时间窗口内,该 SLO 在该日历月内出现了 120 分钟的异常情况,这意味着有 120 分钟内受崩溃影响的会话数量超过了 15。

误差预算计算

误差预算的计算方法是:该时间段内的分钟数乘以(1 - SLO目标百分比):

  • 时间窗口内的总分钟数:28 × 24 × 60 = 40,320 分钟(2月)
  • SLO目标百分比:99%( 0.99 )
  • 误差预算:40,320 × (1 - 0. 0.99 ) = 403 分钟
  • 剩余误差预算:403 - 120 = 283 分钟
  • 剩余误差预算百分比:100% × (283 / 403) = 70.22 %

SLO状态计算

SLO 状态的计算方法如下:

SLO 状态 = 100% × (时间窗口内的总分钟数 - 时间窗口内的异常分钟数) / 时间窗口内的总分钟数

100% × (40,320 总分钟数 - 120 不良分钟数) / 40,320 总分钟数 = 99.70 %

示例 17:采用自定义蓝图的移动应用 SLO( HTTP 请求快速且视图切换流畅)

本示例演示了如何配置一个移动应用 SLO,该 SLO 使用自定义(高级)蓝图,以确保在固定的一日历月内,电子商务移动应用中 99% 的用户交互都能获得快速的 HTTP API 响应(小于 500 毫秒)和流畅的视图切换(小于 300 毫秒)。

配置

SLO 的配置如下:

  • 实体:移动应用
    • 筛选方法:单个移动应用
    • 移动应用:电商移动应用、购物移动应用
  • 指示符:
    • 蓝图:自定义(高级)
    • 类型:事件计数(正常信标与异常信标的总计数)
    • 好的活动:
      • 信标类型: HTTP 请求
      • 度量: httpLatency
      • 阈值:500 毫秒
      • 运算符:<
    • 坏事:
      • 信标类型:查看更改
      • 度量: viewChangeDuration
      • 阈值:300 毫秒
      • 运算符:>
  • 目标:
    • SLO目标:99%
    • 时间窗口类型:固定
    • 时间窗口长度:1个日历月
    • 时区:UTC
    • 开始时间:2026-02-01 00:00

方案分析

在从 2026-02-01 开始的 SLO 时间窗口内,共有 85,000 次 HTTP 请求符合“良好”标准(延迟小于 500 毫秒),另有 1,500 次视图变更被归类为“不良”(viewChangeDuration 延迟大于 300 毫秒)。

误差预算计算

误差预算的计算方法如下:

  • 有效事件数:85,000个信标
  • 异常事件计数:1,500 个信标
  • 事件总数:85,000 + 1,500 = 86,500 个信标
  • SLO目标百分比:99%( 0.99 )
  • 误差预算:86,500 × (1 - 0.99 ) = 865 个信标
  • 剩余误差预算:865 - 1,500 = -635 个信标(超出)
  • 剩余误差预算百分比:100% × (-635 / 865) = -73.41 %(超支)

SLO状态计算

SLO 状态的计算方法如下:

SLO 状态 = 100% × 时间窗口内合格事件总数 / 时间窗口内事件总数

100% × 85,000 个信标 / 86,500 个信标 = 98.27 %

自定义蓝图行为

此自定义蓝图展示了在不同交互类型下监控用户体验的灵活性。 “良好事件”的定义是基于快速的响应(httpLatencyHTTP API ),即从 HTTP 请求信标开始计时,响应时间少于 500 毫秒;而“不良事件”则是视图切换缓慢(viewChangeDuration 从视图变化信标开始计时,响应时间超过 300 毫秒)。 该方法通过利用不同类型信标的指标,同时监控后端 API 的性能和前端导航的流畅度,而这无法通过单一的标准蓝图来实现。 不符合“良好”或“不良”标准的事件将被排除在 SLO 计算之外。

服务级别智能警报配置示例

示例 1:服务级别智能警报,用于监控 SLO 的状态

目标: 当自动售货机可靠性服务级别目标配置状态低于90%时,触发警报并报告问题。

“服务级别智能警报”的配置如下:

Rule:
  Alert Type: Service Levels Objective
  Metric: Status
Threshold:
  Operator: <
  value: 0.90
SLOs: Vending Machine Reliability
Time Threshold:
  Expiry: 5 Minutes
  Time window: 10 Minutes
 

完成“智能警报”配置后,系统将开始监控自动售货机可靠性 SLO 配置的状态。

场景:监控与事件触发

  • SLO跌破阈值

    • 假设自动售货机可靠性服务水平目标(SLO)降至89%,低于90%的设定阈值。
    • 当时间阈值设置为10分钟时,系统将在整个10分钟窗口期内保持等待状态,之后才会采取任何行动。
    • 若系统可用性指标(SLO)在10分钟后仍低于90%,系统将触发事件并提交问题报告。
  • SLO返回值超过阈值

    • 若经过一段时间后,SLO状态恢复并回升至90%以上,系统将持续进行监控。
    • 然而,如果状态持续保持在90%以上,系统将等待5分钟的到期时间阈值。
    • 若SLO在整整5分钟内持续高于90%,该事件将自动关闭。

示例 2:用于监控 SLO 错误预算的服务级别智能警报

目标: 当自动售货机可靠性SLO配置的错误预算消耗百分比超过50%时,触发警报并报告问题。

“服务级别”智能警报的配置如下:

Rule:
  Alert Type: Error Budget
  Metric: Burned Percentage
Threshold:
  Operator: >
  value: 0.50
SLOs: Vending Machine Reliability
Time Threshold:
  Expiry: 5 Minutes
  Time window: 10 Minutes
 

完成智能警报配置后,系统将开始监控自动售货机可靠性 SLO 配置中的错误预算消耗百分比。

场景:监控与事件触发

  • 误差预算消耗超过50%

    • 假设误差预算消耗超过50%。
    • 当时间阈值设置为10分钟时,系统将在等待满10分钟后才采取任何行动。
    • 若错误预算消耗在10分钟后仍高于50%,系统将触发事件并提交问题报告。
  • 误差预算消耗降至50%以下

    • 如果一段时间后,错误预算消耗回落至50%以下,系统将继续进行监控。
    • 若错误预算消耗率保持在50%以下,系统将等待5分钟的到期时间阈值。
    • 若在整整5分钟内,错误预算消耗始终低于50%,该事件将自动关闭。

服务级别消耗率智能警报计算

烧钱率的计算公式为:

消耗速率 = (已消耗的容错预算 * SLO时间窗口) / 告警窗口

  • 例如:
    • 假设过去12小时内消耗的容差预算为70%,且自动售货机可靠性SLO的时间窗口为1天(24小时)。
    • 过去12小时的资金消耗率为: ( 0.70 * 24) / 12 = 1.4
    • 同样地,如果过去2小时消耗的误差预算达到20%
    • 过去2小时的资金消耗率为: ( 0.20 * 24) / 2 = 2.4

示例 3 - 智能告警:通过单一告警窗口和阈值监控 SLO 的消耗速率

目标:若自动售货机可靠性SLO配置的消耗率在过去12小时内超过1,则触发警报并报告问题。

“服务级别”智能警报的配置应为:

Rule:
  Alert Type: Error Budget
  Metric: Burn Rate V2
Burn Rate Config:
[
  Alert Window Type: SINGLE
  Duration: 12 Hours
  Duration Unit Type: Hour
  Threshold:
    Operator: >
    Value: 1
]
SLOs: Vending Machine Reliability
Time Threshold:
  Expiry: 5 Minutes
  Time window: 10 Minutes
 

完成“智能警报”配置后,系统将开始监控指定警报时段内“自动售货机可靠性”SLO配置的消耗速率。

场景:监控与事件触发

  • 警报窗口期(过去12小时)的资金消耗率超过1

    • 假设过去12小时的计算燃烧速率开始超过1。
    • 当时间阈值设置为10分钟时,系统将等待完整的10分钟窗口期后才采取任何行动。
    • 若10分钟后消耗速率仍高于1,系统将触发警报事件并提交问题报告。
  • 警报窗口期(过去12小时)的资金消耗率降至1以下

    • 若一段时间后,告警窗口的消耗速率降至1以下,系统将继续监控。
    • 如果消耗速率保持在1以下,系统将等待5分钟的到期时间阈值。
    • 若在整整5分钟内,消耗率始终低于1,该事件将自动关闭。

示例4 - 智能警报用于监控具有多个警报窗口及相应阈值的SLO消耗速率

目标:当自动售货机可靠性SLO配置的消耗速率在过去24小时内超过1,且在过去2小时内超过4时,触发警报并提交问题报告。

“服务级别”智能警报的配置应为:

Rule:
  Alert Type: Error Budget
  Metric: Burn Rate V2
Burn Rate Config:
[
  Alert Window Type: LONG
  Duration: 24 Hours
  Duration Unit Type: Hour
    Threshold:
    Operator: >
    Value: 1
  ,
  Alert Window Type: SHORT
  Duration: 2 Hours
  Duration Unit Type: Hour
  Threshold:
    Operator: >
    Value: 4
]
SLOs: Vending Machine Reliability
Time Threshold:
  Expiry: 5 Minutes
  Time window: 10 Minutes
 

完成“智能警报”配置后,系统将开始监控自动售货机可靠性 SLO 配置的消耗速率,涵盖长短两种警报窗口。

场景:监控与事件触发

  • 无论是长警报窗口(过去24小时)还是短警报窗口(过去2小时),资金消耗率均超过1

    • 假设过去24小时的计算燃烧率开始超过1,而过去2小时的计算燃烧率开始超过4。
    • 当时间阈值设置为10分钟时,系统将等待完整的10分钟窗口期后才采取任何行动。
    • 若两个告警窗口的消耗速率在10分钟后仍超出阈值,系统将触发告警事件并提交问题。
  • 在长警报窗口期内,资金消耗率降至1以下,但在短警报窗口期内仍保持在4以上

    • 若经过一段时间后,长警报窗口的消耗速率降至1以下,但短警报窗口的消耗速率仍高于4,系统将继续进行监控。
    • 若在长期告警窗口期内,消耗率持续低于1,系统将等待5分钟的到期时间阈值。
    • 若在长警报窗口的完整5分钟内,消耗率始终低于1,则无论短警报窗口的数值如何,该事件将自动关闭——因为必须同时触发两个阈值才能触发警报。 反之亦然——即使短警报窗口触发了阈值,但长警报窗口并未触发。
  • 在长警报窗口期,资金消耗率降至1以下;在短警报窗口期,降至4以下

    • 若经过一段时间后,两个告警窗口的消耗速率均降至各自阈值以下,系统将继续进行监控。
    • 如果消耗速率保持在阈值以下,系统将等待5分钟的到期时间阈值。
    • 若燃烧速率在整整5分钟内始终低于阈值,该事件将自动关闭。
注意: 多窗口耗损率警报需同时触发两个阈值(AND条件)才会发送警报。 即使未触发任何阈值,也不会发送警报。

故障诊断

以下是解决配置服务水平目标(SLO)常见问题的建议。

  • 问题 :未消耗任何错误预算,SLO状态始终为100%。

    • 解决方案 :使用SLO仪表板上的指标图表验证该指标在SLO时间窗口内是否始终未超过阈值,从而确保未消耗错误预算。 您可考虑相应调整阈值。
  • 问题 :未消耗任何错误预算,SLO状态始终为100%。

    • 解决方案 :使用SLO仪表板上的流量图表 ,验证该实体在SLO时间窗口内是否正在接收流量。 否则,错误预算和SLO状态将不受影响。
  • 问题 :错误预算持续快速耗尽,服务水平目标状态持续为负。

    • 解决方案 :使用SLO仪表板上的指标图表验证该指标是否在SLO时间窗口内持续超过阈值,从而导致错误预算快速消耗。 您可考虑相应调整阈值。
  • 问题 :由于时间窗口错位,烧钱率警报未被触发。

    • 解决方案
      • 固定时间窗口服务水平目标(SLO) :若SLO配置采用固定时间窗口,当耗尽率计算基于的告警窗口长度超过SLO时间段内的实际经过时间时,告警可能不会触发。 例如,如果警报窗口需要12小时内的数据,但服务水平目标(SLO)时间窗口刚刚开始,那么消耗率可能没有足够的时间超过阈值。 因此,即使在经过的时间段内消耗率较高,也不会触发警报。
      • 滚动时间窗口服务级别目标(SLO) :若将SLO设置为滚动时间窗口,当告警窗口超出SLO创建时间时,消耗率计算可能不会触发告警。 例如,如果告警窗口超出了服务水平目标(SLO)创建或生效的时段,则无法正确计算消耗率,因为告警窗口内无法获取完整的数据。