使用 SQL 进行 SLI、SLO 和错误预算监控
服务级别指标 (SLI) 衡量用户体验的结果。服务级别目标 (SLO) 在定义的窗口内设置该指标的目标。错误预算是目标隐含的允许失败量。
从有限的应用程序结果开始,例如 API 请求、结账、作业或 Webhook 交付。基础设施可用性是有用的背景,但健康的主机并不能证明客户工作流程成功。
定义事件契约
对于基于请求的可用性 SLI,请使用以下命令发出一个终端事件:
event_id;timestamp_utc;service和route_template;status和status_code;latency_ms;environment和release;- 受控
error_type; - 用于影响分析的可选安全
account_id。
文件资格。健康检查、综合流量、取消的请求和预期的客户端错误可能属于也可能不属于分母。整个查询、仪表板和告警中的决策必须保持一致。
计算可用性合规性
SLO 可用性 SQL 配方 区分合格请求、良好请求、不良请求和合规百分比。将其与完整的观察窗口和经过审查的好事件定义一起使用。
对于 99.9% 的目标,允许的不良分数为 0.001。以请求衡量的错误预算为:
eligible_requests * (1 - objective)
除了百分比之外,还要进行计数。两个请求的失败率为 50%,一百万个请求的失败率为 2%,需要不同的解释。
监控燃烧率
燃烧率将观察到的不良事件分数与允许的不良事件分数进行比较。 1 的消耗率完全按照计划的速度消耗预算。高于 1 的燃烧率会消耗掉它太快。
错误预算燃烧配方 计算时间段内的值。将一个短窗口与一个较长的窗口配对,该窗口可以检测快速事件,该窗口可以防止一个嘈杂的桶对团队进行寻呼。
除非查询明确考虑部分数据,否则不要对最新的不完整时间段发出告警。触发前需要最低合格交易量和持续评估点。
添加延迟和工作流程 SLI
可用性只是一种用户可见的属性。请求可能会在出现不可接受的延迟后成功。将延迟 SLI 定义为低于审核阈值的合格请求的比例,或使用 API 延迟百分位数配方 检查 p95 和 p99。
对于后台作业和 Webhooks,请围绕终端业务成果而不是个人尝试来定义成功。恢复的重试可能会消耗延迟预算,而不算作终端故障。保持尝试级诊断可用,而不会夸大 SLI 分母。
构建仪表板和告警路径
将这些视图放在一起:
- 合格的请求量和数据新鲜度。
- 完整滚动窗口的 SLO 合规性。
- 短窗和长窗燃烧率。
- 按路线、版本和错误类型划分的故障细分。
- 用于客户影响调查的近期事件表。
添加操作注释,其中列出所有者、目标、分母、排除和响应操作。按照 告警指南 进行评估行为,按照 事件响应指南 进行调查流程。
分页前验证
重播包含已知成功、失败、排除事件和不完整的最新存储桶的赛程。确认确切的合格数量、允许的故障、合规性和燃烧率。然后在附加待命响应之前观察没有通知的告警。