ObservaStack

SLO 燃烧率

orders-api 可用率目标 99.9%(错误预算 0.001,30 天)。延迟 SLI 是「快于 300ms 的请求比例」,目标 99%(预算 0.01)。下表是规则表达式里的阈值,来自 SRE Workbook,不是单元测试喂进去的错误率。

规则倍数长窗口短窗口30 天预算消耗规则
14.41h5m1 小时约消耗 2%OrdersApiErrorBudgetBurnFast 的 1h+5m 支
66h30m6 小时约消耗 5%OrdersApiErrorBudgetBurnFast 的 6h+30m 支
31d2h1 天约消耗 10%OrdersApiErrorBudgetBurnSlow 的 1d+2h 支
13d6h3 天约消耗 10%OrdersApiErrorBudgetBurnSlow 的 3d+6h 支
14.4 / 61h / 6h5m / 30m延迟预算 0.01OrdersApiLatencySLOBurn

下面每一行的输入倍数由 tests/rules/slo.test.yml 的 input_series 最后一段步长算出(错误增量 / 总增量 / 预算),再写入 checks.json。eval_time、firing 和结果来自同一次 promtool 记录。比较是严格大于,所以触发用例的输入高于规则倍数,而不是等于规则倍数。

测试组输入倍数告警eval_timefiring结果
fast_burn_15x15OrdersApiErrorBudgetBurnFast5h58mfalsepassed
fast_burn_15x15OrdersApiErrorBudgetBurnFast5h59mtruepassed
fast_burn_15x15OrdersApiErrorBudgetBurnSlow5h58mtruepassed
fast_burn_15x15OrdersApiErrorBudgetBurnSlow5h59mtruepassed
slow_burn_3_5x_only3.5OrdersApiErrorBudgetBurnFast3mfalsepassed
slow_burn_3_5x_only3.5OrdersApiErrorBudgetBurnSlow2mfalsepassed
slow_burn_3_5x_only3.5OrdersApiErrorBudgetBurnSlow3mtruepassed
burn_0_5x_neither0.5OrdersApiErrorBudgetBurnFast10mfalsepassed
burn_0_5x_neither0.5OrdersApiErrorBudgetBurnSlow10mfalsepassed
latency_burn_fires50OrdersApiLatencySLOBurn8htruepassed
latency_burn_quiet1OrdersApiLatencySLOBurn8hfalsepassed

这些组的 input_series 有多段,表上的倍数是最后一段的步长,不是整段平均:fast_burn_15x。 fast_burn_15x 的 OrdersApiErrorBudgetBurnFast 在 5h58m 不触发,在 5h59m 触发。输入倍数是 15。 Fast 规则要 1h 与 5m 同时高于 14.4 倍,或 6h 与 30m 同时高于 6 倍,并持续 for 2m。fast_burn_15x 把高错误率放在尾段,所以 Fast 在 5h58m 仍为空,到 5h59m 才出现。这个时刻对上的是 1h+5m 那一支。 fast_burn_15x 的 OrdersApiErrorBudgetBurnSlow 在 5h58m、5h59m 触发。输入倍数是 15。 slow_burn_3_5x_only 的 OrdersApiErrorBudgetBurnFast 在 3m 不触发。输入倍数是 3.5。 slow_burn_3_5x_only 的 OrdersApiErrorBudgetBurnSlow 在 2m 不触发,在 3m 触发。输入倍数是 3.5。 burn_0_5x_neither 的 OrdersApiErrorBudgetBurnFast 在 10m 不触发。输入倍数是 0.5。 burn_0_5x_neither 的 OrdersApiErrorBudgetBurnSlow 在 10m 不触发。输入倍数是 0.5。 latency_burn_fires 的 OrdersApiLatencySLOBurn 在 8h 触发。输入倍数是 50。 latency_burn_quiet 的 OrdersApiLatencySLOBurn 在 8h 不触发。输入倍数是 1。

延迟组的组名没有倍数记号。它们的输入倍数用同一套末段步长,预算是 0.01。Watchdog 只有 firing 用例,不在这张表里。