4. SLA 与 SLO 基础:定义、关系与连接池场景应用
在连接池水位监控与告警阈值设计中,SLA(Service Level Agreement,服务等级协议)、SLO(Service Level Objective,服务等级目标)和SLI(Service Level Indicator,服务等级指标)是三个核心概念。它们构成了从业务承诺到技术指标再到可度量数据的完整链路。理解这三者的定义及其关系,是设计合理告警阈值的前提。
4.1 核心定义
| 术语 | 英文全称 | 定义 | 典型示例(连接池场景) |
|---|---|---|---|
| SLA | Service Level Agreement | 服务提供方与用户之间签订的、具有法律或商业约束力的正式协议,定义了服务的最低可接受水平及未达标的后果(如赔偿、扣减费用)。 | “数据库连接可用性不低于 99.9%,每月计算;每低于 0.1% 赔偿当月费用的 5%。” |
| SLO | Service Level Objective | 服务提供方内部设定的、比 SLA 更严格的目标值,用于指导日常运维和系统设计。SLO 是 SLA 的内部保障线。 | “连接池获取连接的平均等待时间 ≤ 5ms(P99),每月达标率 ≥ 99.95%。” |
| SLI | Service Level Indicator | 对 SLO 进行量化测量的具体指标数据,通常是时间序列上的原始或聚合值。SLI 是 SLO 的“测量仪表盘”。 | “过去 5 分钟内,连接池活跃连接数 / 最大连接数 的比值(水位百分比)。” |
关键区分:SLA 是“对外承诺”,SLO 是“对内目标”,SLI 是“测量数据”。SLO 通常比 SLA 更严格,为 SLA 提供缓冲;SLI 则是判断 SLO 是否达标的唯一依据。
4.2 三者之间的关系
SLA、SLO、SLI 构成一个自上而下的金字塔结构:
- SLA 在最顶层:定义业务层面的承诺与后果,通常由产品、法务、商务团队与客户协商确定。
- SLO 在中间层:由技术团队根据 SLA 推导并设定,是系统设计与运维的“靶心”。SLO 必须比 SLA 更严格,以预留容错空间(Error Budget)。
- SLI 在底层:是具体的可观测指标,通过监控系统采集并计算,用于评估 SLO 的达成情况。
三者之间的核心关系可以用以下公式表达:
SLI 的聚合值(如月度达标率) ≥ SLO 阈值 → SLA 达标
SLI 的聚合值 < SLO 阈值 → 触发内部告警,启动应急响应
SLI 的聚合值 < SLA 阈值 → 触发对外违约,启动赔偿流程
连接池场景下的关系示例:
SLA 承诺“数据库连接可用性 ≥ 99.9%”,SLO 设定为“连接池获取连接超时率 ≤ 0.05%(即 99.95% 成功率)”,SLI 则为“过去 1 分钟内,获取连接超时的请求数 / 总请求数”。当 SLI 显示超时率超过 0.05% 时,触发 SLO 告警;若持续恶化导致月度可用性低于 99.9%,则触发 SLA 违约。
SLA 承诺“数据库连接可用性 ≥ 99.9%”,SLO 设定为“连接池获取连接超时率 ≤ 0.05%(即 99.95% 成功率)”,SLI 则为“过去 1 分钟内,获取连接超时的请求数 / 总请求数”。当 SLI 显示超时率超过 0.05% 时,触发 SLO 告警;若持续恶化导致月度可用性低于 99.9%,则触发 SLA 违约。
4.3 在连接池场景下的应用
将 SLA/SLO/SLI 框架应用于连接池水位监控,需要将抽象的承诺转化为具体的、可操作的阈值。以下是典型的设计步骤:
- 定义 SLI(测量什么):确定连接池的关键健康指标,通常包括:
- 水位百分比:活跃连接数 / 最大连接数 × 100%
- 等待队列长度:当前等待获取连接的请求数
- 获取连接等待时间(P99/P95):请求从入队到获取连接的时间
- 连接超时率:获取连接超时的请求占比
- 连接泄漏率:未正确归还连接的占比
- 设定 SLO(目标是多少):基于业务容忍度,为每个 SLI 设定内部目标。例如:
- 水位百分比:P99 ≤ 80%(避免接近 100% 导致阻塞)
- 等待队列长度:P99 ≤ 5 个请求
- 获取连接等待时间:P99 ≤ 10ms
- 连接超时率:≤ 0.1%
- 推导 SLA(对外承诺什么):将 SLO 转化为对外承诺,通常更宽松。例如:
- 连接可用性(非超时率)≥ 99.9%
- 平均获取连接时间 ≤ 50ms
- 设计告警阈值:告警阈值应基于 SLO 设定,而非 SLA。通常设置多级阈值:
- Warning(警告):接近 SLO 边界(如水位 75%),提前干预。
- Critical(严重):达到或超过 SLO 边界(如水位 80%),立即处理。
- Pager(紧急):接近 SLA 边界(如水位 90%),需要紧急响应。
常见误区:不要直接将 SLA 阈值作为告警触发点。SLA 是“最后防线”,一旦触发往往已造成业务影响或赔偿。告警应基于更严格的 SLO,预留足够的响应时间(Error Budget)。
4.4 连接池水位监控的 SLA/SLO/SLI 关系图
下图展示了从业务承诺到技术指标再到监控数据的完整链路,以及告警阈值在其中的位置:
4.5 连接池场景下的 SLI 与 SLO 映射表
以下表格展示了连接池场景中常见的 SLI、对应的 SLO 建议值以及告警阈值参考:
| SLI(指标) | 测量方式 | SLO 建议值(内部目标) | Warning 阈值 | Critical 阈值 | Pager 阈值 |
|---|---|---|---|---|---|
| 连接池水位 | 活跃连接数 / 最大连接数 × 100% | P99 ≤ 80% | ≥ 75% | ≥ 80% | ≥ 90% |
| 获取连接等待时间 | P99 分位值(ms) | P99 ≤ 10ms | ≥ 8ms | ≥ 10ms | ≥ 20ms |
| 连接超时率 | 超时请求数 / 总请求数 × 100% | ≤ 0.1% | ≥ 0.05% | ≥ 0.1% | ≥ 0.5% |
| 等待队列长度 | 当前排队请求数(P99) | P99 ≤ 5 | ≥ 3 | ≥ 5 | ≥ 10 |
| 连接泄漏率 | 未归还连接数 / 总连接数 × 100% | ≤ 0.01% | ≥ 0.005% | ≥ 0.01% | ≥ 0.05% |
设计原则:
- SLO 必须比 SLA 严格:为 Error Budget 留出空间,避免 SLA 违约。
- 告警阈值基于 SLO:Warning 在 SLO 边界内提前预警,Critical 在 SLO 边界触发,Pager 在接近 SLA 时紧急响应。
- SLI 选择要全面:水位、等待时间、超时率、队列长度、泄漏率缺一不可,单一指标无法反映连接池全貌。
- 定期复盘调整:SLO 和告警阈值应根据实际运行数据(如平均水位、峰值流量)定期优化,避免过度告警或告警遗漏。
4.6 连接池水位监控的 Error Budget 机制
Error Budget(错误预算)是 SLA/SLO 框架中的核心概念,它定义了在 SLO 范围内允许的“不可用”或“不达标”时间。在连接池场景中,Error Budget 的计算与应用如下:
- 计算方式:Error Budget = 1 - SLO(例如 SLO 为 99.95%,则 Error Budget 为 0.05%,即每月约 21.6 分钟)。
- 消耗与告警:每次连接超时或等待时间超标都会消耗 Error Budget。当消耗超过一定比例(如 50%)时触发告警,提醒团队在剩余预算耗尽前进行优化。
- 决策依据:如果 Error Budget 充足,可以接受较低风险的变更或发布;如果 Error Budget 紧张,则应暂停非紧急变更,优先解决连接池问题。
实践建议:在连接池监控仪表盘中,除了展示实时水位和等待时间外,还应显示 Error Budget 的消耗进度条。当消耗超过 70% 时,自动触发 Pager 告警,并建议团队立即进行扩容或优化。