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 违约。

4.3 在连接池场景下的应用

将 SLA/SLO/SLI 框架应用于连接池水位监控,需要将抽象的承诺转化为具体的、可操作的阈值。以下是典型的设计步骤:

  1. 定义 SLI(测量什么):确定连接池的关键健康指标,通常包括:
    • 水位百分比:活跃连接数 / 最大连接数 × 100%
    • 等待队列长度:当前等待获取连接的请求数
    • 获取连接等待时间(P99/P95):请求从入队到获取连接的时间
    • 连接超时率:获取连接超时的请求占比
    • 连接泄漏率:未正确归还连接的占比
  2. 设定 SLO(目标是多少):基于业务容忍度,为每个 SLI 设定内部目标。例如:
    • 水位百分比:P99 ≤ 80%(避免接近 100% 导致阻塞)
    • 等待队列长度:P99 ≤ 5 个请求
    • 获取连接等待时间:P99 ≤ 10ms
    • 连接超时率:≤ 0.1%
  3. 推导 SLA(对外承诺什么):将 SLO 转化为对外承诺,通常更宽松。例如:
    • 连接可用性(非超时率)≥ 99.9%
    • 平均获取连接时间 ≤ 50ms
  4. 设计告警阈值:告警阈值应基于 SLO 设定,而非 SLA。通常设置多级阈值:
    • Warning(警告):接近 SLO 边界(如水位 75%),提前干预。
    • Critical(严重):达到或超过 SLO 边界(如水位 80%),立即处理。
    • Pager(紧急):接近 SLA 边界(如水位 90%),需要紧急响应。
常见误区:不要直接将 SLA 阈值作为告警触发点。SLA 是“最后防线”,一旦触发往往已造成业务影响或赔偿。告警应基于更严格的 SLO,预留足够的响应时间(Error Budget)。

4.4 连接池水位监控的 SLA/SLO/SLI 关系图

下图展示了从业务承诺到技术指标再到监控数据的完整链路,以及告警阈值在其中的位置:

SLA/SLO/SLI 在连接池场景下的关系与告警阈值 连接池水位监控:SLA / SLO / SLI 关系与告警阈值 SLA(服务等级协议) 对外承诺:连接可用性 ≥ 99.9% SLO(服务等级目标) 内部目标:水位 ≤ 80%(P99) 等待时间 ≤ 10ms(P99) SLI(服务等级指标) 水位百分比 | 等待队列长度 | 获取连接等待时间(P99)| 超时率 告警阈值设计(基于 SLO) Warning:水位 ≥ 75% Critical:水位 ≥ 80% Pager:水位 ≥ 90%

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 告警,并建议团队立即进行扩容或优化。