想象你家小区门口有一家叫“云朵奶茶店”的小店。顾客点单后最怕的不是奶茶不好喝,而是等太久。店长为了留住客人,在外卖平台承诺:“出杯超过15分钟,这单免单。”这句白纸黑字的承诺,就是SLA。为了让承诺不落空,店长又给自己定了内部标准:“95%的订单要在5分钟内做好。”这就是SLO。而收银台电子屏上实时滚动的每笔订单耗时、每天免单数、高峰期排队长度,就是SLI。 云原生世界里的服务,和这家奶茶店没什么两样。微服务之间互相调用、互相“点单”,谁也不能保证自己永远不出错。可观测性平台就像那面电子屏,帮我们把服务的“出杯时长”“免单次数”实时采集并展示出来。本文要讲的,就是如何在这面大屏上,把SLO、SLI、错误预算、SLA合规报告这些概念真正落地成一套工程体系,让平台不仅能“看见”故障,还能“管理”可靠性。

岗位关联

对AI从业者来说,SLO工程是云原生可观测性的核心闭环:它把抽象的可靠性变成可测量、可预警、可问责的工程指标,是SRE和平台架构师最核心的职业技能之一。

目录
  1. 可视化演示
  2. SLO基础概念
  3. SLI指标设计
  4. SLO制定方法
  5. 错误预算管理
  6. 可观测性集成
  7. SLA合规报告
  8. AIOps智能运营
  9. 工程实践落地
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

SLO基础概念

云朵奶茶店的外卖台贴着一张字条:“出杯超过15分钟,这单免单。”这是店长和顾客之间的合同,也就是SLA。但店长知道,真要等客户抱怨才免单就晚了,于是给店员定了内部要求:“100单里至少95单要在5分钟内出杯。”这个内部要求,就是SLO。而收银台上那把记着每一单制作秒数的电子计时器,就是SLI——它把“承诺”变成了“数字”。

把视角从奶茶店搬到云原生环境:一个订单中心服务要调用库存、支付、积分三个下游服务,每个下游都可能变慢。对运维团队来说,SLA往往写在与客户的合同里,而真正每天驱动研发行为的,是内部定义的SLO。SLO背后必须有一个可采集的SLI,否则“目标”就是空中楼阁。

SLI的经典定义是“好事件占全部事件的比率”。对HTTP服务来说,最朴素的SLI就是请求成功率——把2xx和3xx当作好事件,把4xx、5xx以及超时统统算作坏事件。

这个比值越高,说明“顾客拿到奶茶”的概率越大。SLA、SLO、SLI三者环环相扣:SLA是外卖平台上的白纸黑字,SLO是店里的操作标准,SLI则是墙上那块让所有人都看得见的仪表屏。没有SLI,SLO只是口号;没有SLO,SLA就成了赌运气。

SLI=NgoodNtotalSLI = \frac{N_{good}}{N_{total}}
这个公式的含义很直白:把一段时间内的“成功响应数”除以“全部请求数”,得到的比值就是当前服务的可靠度。
  1. 统计分母(全部请求)在观测时间窗口内,系统收到的所有有效请求数,相当于奶茶店一整天接下的全部订单。
    Ntotal=N2xx+N3xx+N4xx+N5xxN_{total} = N_{2xx} + N_{3xx} + N_{4xx} + N_{5xx}
  2. 统计分子(好请求)凡是顺利返回2xx或3xx状态的请求,都算作“好订单”。
    Ngood=N2xx+N3xxN_{good} = N_{2xx} + N_{3xx}
  3. 求出比值用成功数除以总数,得到观测窗口内服务的可靠程度。
    SLI=NgoodNtotalSLI = \frac{N_{good}}{N_{total}}

SLI指标设计

云朵奶茶店的店长发现,只看“平均出杯时间”很容易骗人:上午10分钟出一杯,下午2分钟出一杯,平均下来6分钟,好像还不错,可上午排队的顾客早就骂街了。于是他给电子屏加了一条横线——5分钟阈值,凡是超过这条线的订单都被标记为“慢单”。

在云原生可观测性领域,这条“横线”就是SLI的设计核心。Google SRE 经典著作提出的“四个黄金信号”给了我们一个很好的起点:延迟(请求有多慢)、流量(请求有多少)、错误(请求失败了多少)、饱和度(服务快满了吗)。但并非每个指标都适合直接作为SLI,设计SLI的关键在于“用户视角”:用户并不关心CPU是否90%,用户只关心页面能不能在2秒内打开。

以时延SLI为例,我们需要先定义“多快算快”,然后统计所有请求中达到这个标准的比例:

每个黄金信号都有适合自己的SLI形态:成功率反映“能不能用”,时延反映“用得快不快”,饱和度反映“还能撑多久”。设计SLI最怕“指标太多而没有重点”,就像奶茶店如果同时盯温度、湿度、牛奶保质期,反而会忽略顾客最关心的出杯速度。只挑几个与用户体感强相关的指标,才能让大屏真正指导行动。

SLIlatency=count(latency≤Tthreshold)count(requests)SLI_{latency} = \frac{\text{count}(latency \le T_{threshold})}{\text{count}(requests)}
这个公式的意思是:设定一个响应时延门槛(比如500毫秒),然后数一数有多少请求在这个门槛之内,再除以总请求数。
  1. 确定时延阈值定义用户可接受的最长响应时间,超过就算“品质不达标”。
    Tthreshold=500msT_{threshold} = 500\text{ms}
  2. 统计达标请求数通过链路追踪和指标直方图,统计响应时间小于等于阈值的请求数量。
    Ngood=count(latency≤Tthreshold)N_{good} = \text{count}(latency \le T_{threshold})
  3. 除以总请求数将达标请求数与窗口内全部请求数相除,得到时延维度的SLI。
    SLIlatency=NgoodNtotalSLI_{latency} = \frac{N_{good}}{N_{total}}

SLO制定方法

店长想给外卖平台写新承诺:“99%的订单5分钟内出杯!”店员们立刻抗议:晚高峰奶茶机只有一台,怎么可能?店长于是翻出过去28天的出杯记录,算出高峰期实际只有92%能在5分钟内完成。最终他把SLO定为95%,留出5%的“犯错空间”。这个从数据出发定目标的方法,就是基线数据法。

制定SLO不能拍脑袋。首先应该明确“从谁的视角看”:是用户体感、还是系统内部的健康?显然应该选用户体感。其次是看基线数据:至少采集一到两个星期的历史SLI,了解正常波动范围,再定一个“跳一跳够得着”的目标。最后一定要给错误预算留出空间——SLO越接近100%,需要投入的冗余成本就越高,甚至呈指数增长。

在可观测性平台上,SLO通常表达为“在统计窗口内,SLI达标的时间占比不低于某个百分比”。从时间维度看:

SLO不是越高越好,也不是越低越省事。定得太高,团队会为了虚无的“五个九”疲于奔命;定得太低,用户体感又会变差。用基线数据定目标,就像店长先看28天流水再决定“95%”:既有依据,又有余量,还让所有人服气。

SLO=(1−TdownTtotal)×100%SLO = \left(1 - \frac{T_{down}}{T_{total}}\right) \times 100\%
这里的含义是:一个月的总时长里,服务“不在线”的时间越短,SLO达标率越高。
  1. 确定统计窗口定义SLO的观测周期,通常是28天或一个月。
    Ttotal=统计周期总时长T_{total} = \text{统计周期总时长}
  2. 统计不可用时间汇总窗口内所有SLO不达标的时间片段,例如超时、5xx、连接失败累积的时长。
    Tdown=∑故障时长T_{down} = \sum \text{故障时长}
  3. 计算可用占比用总时长减去不可用时长,再除以总时长,得到SLO达标率。
    SLO=(1−TdownTtotal)×100%SLO = \left(1 - \frac{T_{down}}{T_{total}}\right) \times 100\%

错误预算管理

既然SLO承诺“95%的订单5分钟内出杯”,那就意味着还有5%的订单可以“犯错”。云朵奶茶店的店长把这5%换算成每月可以超时的订单数,存进一个“犯错额度罐子”。这个罐子,就是错误预算。只要罐子里还有余额,团队就可以安心迭代;一旦罐子快空了,大家就得放下新功能,专心修稳定性。

错误预算的伟大之处,在于它把“可靠性”变成了可消费的资源。产品和研发经常因为“要不要发版”吵架,错误预算是双方都认可的裁判:预算充足就发,预算耗尽就冻结。计算方式也很简单:

更进一步,我们还要关注消耗速率:错误预算不是“月底才看总量”,而是按小时追踪“烧钱速度”。如果预算在一个小时内就烧掉一半,哪怕余额还有30%,也必须立即预警。预算是静态的存量,消耗速率才是动态的风险信号。把这个信号接进告警平台,才能真正实现“烧到多少、采取什么行动”的自动化管理。

Ebudget=(1−SLO)×NtotalE_{budget} = (1 - SLO) \times N_{total}
这把“允许犯错的总量”换算成了一个具体数字:比如SLO是99%,一个月有100万次请求,那错误预算就是1万次失败请求。
  1. 算出错误率余量用1减去SLO目标,得到允许出错的比例。
    1−SLO=1%1 - SLO = 1\%
  2. 乘以总请求数把允许出错的比例乘到统计窗口内的总请求数上,得到可容忍的失败次数。
    Ebudget=1%×100万=1万次E_{budget} = 1\% \times 100\text{万} = 1\text{万次}
  3. 实时扣减每一次失败请求都从错误预算中扣掉,余额趋近于零时触发告警。
    Eremaining=Ebudget−NfailedE_{remaining} = E_{budget} - N_{failed}

可观测性集成

云朵奶茶店的店长把电子计时器、外卖平台的差评记录、高峰期的排队摄像头全部接到一台总控电脑上。每个数据源都按约定每秒上报一次,大屏上实时滚动:今日订单量、超时单数、错误预算余额。这就是把SLI集成进可观测性平台的过程。

在云原生环境里,SLI自动采集通常依赖“埋点 + 指标协议 + 数据管线”三部曲。服务通过Prometheus SDK或OpenTelemetry埋点暴露指标,监控系统按固定间隔抓取,再经过聚合层处理后存入时序数据库,最终由Grafana等工具展示。为了让聚合结果稳定,我们常用滑动窗口计算平均SLI:

采集层要看“准”,计算层要看“稳”,展示层要看“懂”。SDK上报延迟、指标缺失、采样不全都会让SLI失真。架构设计上还得考虑数据管线的容灾:监控系统本身挂了怎么办?采集端点是不是单点?这些看似琐碎的问题,决定了大屏上的数字是否值得信任。店长也明白,计时器坏了,所谓的“95%达标”就只是一块好看的黑板。

SLI‾=∑k=1ngoodk∑k=1ntotalk\overline{SLI} = \frac{\sum_{k=1}^{n} good_k}{\sum_{k=1}^{n} total_k}
把一段时间切成若干小窗口,每个窗口各自统计好坏请求,最后统一汇总,得到一个平滑的SLI均值。
  1. 切分时间窗口以分钟或小时为单位切分观测窗口,每个窗口独立记录。
    k=1,2,…,nk = 1, 2, \ldots, n
  2. 统计每个窗口的好事件在每个窗口内分别累计成功请求数。
    goodk=第k个窗口的成功请求数good_k = \text{第} k \text{个窗口的成功请求数}
  3. 汇总所有窗口把全部窗口的成功数相加,除以总请求数,得到聚合SLI。
    SLI‾=∑k=1ngoodk∑k=1ntotalk\overline{SLI} = \frac{\sum_{k=1}^{n} good_k}{\sum_{k=1}^{n} total_k}

SLA合规报告

月底到了,云朵奶茶店的外卖平台给店长发来一张对账单:本月总订单12800单,超时免单213单,履约率98.3%,低于合同约定的99%,按规则需要赔付平台违约金。店长一点不慌,因为他手里的总控电脑也自动生成了同样一张报告,数据一分不差。这就是SLA合规报告。

在企业级平台中,SLA合规报告必须是自动生成、口径一致、可审计的。所谓合规计算口径,就是明确“哪些时长算故障时长、哪些算免责时长”。比如云厂商的SLA通常会把“客户维护窗口”“不可抗力”排除在外。报告的生成机制要可复现:任何人拿同一批原始数据,都能算出同一个结论。月度可用性公式如下:

SLA报告不仅是“对账”,更是改善依据。如果连续几个月可用性都在合同线上挣扎,说明SLO的设定或资源投入出了系统性问题。审计留痕同样重要:每条告警、每次故障恢复、每一笔扣减都要有日志可追溯。就像店长会保存每一张免单小票,平台的SLA报告背后,也需要一套完整的审计追踪链路。

Amonth=(1−DoutageDmonth)×100%A_{month} = \left(1 - \frac{D_{outage}}{D_{month}}\right) \times 100\%
这个公式计算的是“一个月中有多大比例的时间服务是好的”,用总时长减去故障时长再除以总时长。
  1. 汇总故障时长把本月所有SLA故障单的持续时间累加,得到扣减时长。
    Doutage=∑i故障单时长iD_{outage} = \sum_{i} \text{故障单时长}_i
  2. 确定月度总时长以自然月为分母,通常按30天计算。
    Dmonth=30×24×60分钟D_{month} = 30 \times 24 \times 60 \text{分钟}
  3. 计算可用性百分比用总时长减去扣减时长,再除以总时长,得到月可用性。
    Amonth=(1−DoutageDmonth)×100%A_{month} = \left(1 - \frac{D_{outage}}{D_{month}}\right) \times 100\%

AIOps智能运营

店长发现,光靠人盯大屏总会慢半拍:等看到错误预算跌到10%时,其实一天前就该启动备料了。于是他给总控电脑加了个“智能店员”——它能根据订单趋势预测明天的出杯压力,自动提醒店长提前安排兼职员工。这个“智能店员”,就是AIOps。

AIOps在SLO工程中的价值主要体现在三件事:异常自动识别、消耗趋势预测、根因智能定位。传统监控靠固定阈值告警,而AIOps会用历史数据学习SLI的正常波动模式,在异常刚露头时发出信号。对于错误预算这类带时间序列特征的指标,常用指数平滑模型进行预测:

AIOps不是要替代SRE,而是帮SRE在故障发生前“多想一步”。当AIOps识别错误预算消耗速率异常时,会自动触发告警并推荐可能的根因(例如最近变更的版本、异常的中间件指标)。这些推荐不会直接发版,而是进入值班人员的工作流。智能店员再聪明,最终拍板的还是店长本人——人机协同,才是AIOps落地的最佳姿势。

x^t+1=αxt+(1−α)x^t\hat{x}_{t+1} = \alpha x_t + (1 - \alpha)\hat{x}_t
指数平滑的核心思路是:下一步的预测值等于“本次真实值”和“上次预测值”按权重混合,让预测既跟上变化又不至于太敏感。
  1. 获取当前观测值记录本时间窗口的SLI真实值。
    xt=当前窗口的实测值x_t = \text{当前窗口的实测值}
  2. 取出上次预测值拿到上一个窗口对本次的预测结果。
    x^t=上一轮预测值\hat{x}_t = \text{上一轮预测值}
  3. 加权融合用平滑系数α把真实值和预测值组合起来,得到对下一个窗口的预测。
    x^t+1=αxt+(1−α)x^t\hat{x}_{t+1} = \alpha x_t + (1 - \alpha)\hat{x}_t

工程实践落地

最后一步,是把以上所有能力固化为一套可重复的运作流程。云朵奶茶店的店长把总控电脑变成了“运营中台”:每天早会看一眼错误预算余额,每周复盘一次SLI趋势,每月自动生成SLA合规报告;系统一旦判定预算消耗过快,自动冻结新口味上架,直到稳定性恢复。

工程实践落地包含两个层面。第一是平台架构:采集层负责SLI自动采集,计算层负责SLO聚合与错误预算核算,展示层提供看板和报告,告警层负责多级通知与发布门禁。第二是流程规范:告警要有分级响应,值班要有交接机制,SLO要定期评审优化。流程和工具缺一不可,否则再漂亮的看板也只是摆设。发布门禁的逻辑可以用一个判据表达:

SLO工程是一个不断进化的闭环:上线看板、暴露问题、改进架构、优化目标、再上线更准的看板。很多团队一开始只有“一个Grafana面板”,但坚持跑几个月后,就会自然生长出告警规范、变更审批、故障复盘等完整机制。就像奶茶店从“一块电子屏”慢慢变成“运营中台”,SLO工程实践的本质,是把可靠性从个人英雄主义变成组织能力。

Alert=1[ rburn>k×rtolerance ]Alert = \mathbf{1}\left[\, r_{burn} > k \times r_{tolerance}\,\right]
当实际错误预算燃烧率超过允许燃烧率的k倍时,系统判定进入风险状态并触发告警。
  1. 计算当前燃烧率统计当前时间窗口内错误预算的消耗速度。
    rburn=EconsumedEperiodr_{burn} = \frac{E_{consumed}}{E_{period}}
  2. 设定容忍乘数根据业务风险确定一个容忍系数k,通常是1到2之间。
    k=1.5k = 1.5
  3. 比较并触发告警当燃烧率超过容忍上限时,指示函数取值为1,触发告警和发布冻结。
    Alert=1[rburn>k×rtolerance]Alert = \mathbf{1}[r_{burn} > k \times r_{tolerance}]

AI 应用场景

电商大促SLO全景看板

阶段:数据采集与可视化

解决的问题:大促期间流量是日常的10倍,传统监控只显示CPU和内存,无法反映“用户下单到底成不成功”。通过SLI自动采集下单链路的成功率与时延,构建SLO看板,让技术负责人一屏看清“错误预算还剩多少”。

具体案例:某电商平台在双11前为“下单-支付”核心链路制定了99.95%的SLO,并在可观测性平台上接入全链路埋点。大促开始后,SLI看板显示支付成功率从99.98%掉到99.90%,错误预算加速消耗,系统自动触发告警并定位到支付网关超时,运维立即扩容,半小时后指标恢复。

音视频直播卡顿SLO治理

阶段:异常检测与根因定位

解决的问题:直播业务的用户体验痛点是卡顿率,但传统监控只看服务器端码率,无法感知用户端的真实播放质量。通过端上SDK上报播放器事件,将“卡顿率”定义为SLI,并设定SLO目标。

具体案例:某直播平台在可观测性平台中集成了播放器埋点,实时计算首帧时长和卡顿时长占比。当某省用户卡顿率SLO连续10分钟超出目标时,AIOps自动识别出是该省CDN节点异常,自动切换流量到邻近节点,卡顿率恢复,SLA报告月底自动生成并提交给内容合作方。

金融支付链路发布门禁

阶段:自动化决策与流程管控

解决的问题:金融系统对稳定性要求极高,每次发版都像在刀尖上跳舞。将错误预算与CI/CD流水线集成,当错误预算消耗过快时自动阻断发布,从机制上保证“不稳不发”。

具体案例:某支付平台为核心转账链路设定99.99%的SLO,错误预算每季度约5.2分钟消耗额度。某次版本发布后错误预算燃烧率突然飙升至3倍,流水线自动回滚新版本,并通知值班SRE定位到慢SQL问题,避免了大规模故障。

Python 演示

python47 行
import random class ErrorBudgetMonitor:    def __init__(self, slo=0.99, total_requests=10000):        self.slo = slo        self.total_requests = total_requests        self.error_budget = int((1 - slo) * total_requests)        self.fail_count = 0        self.req_count = 0     def record(self, success):        self.req_count += 1        if not success:            self.fail_count += 1        return self.remaining()     def remaining(self):        return max(0, self.error_budget - self.fail_count)     def burn_rate(self):        if self.req_count == 0:            return 0.0        actual_error_rate = self.fail_count / self.req_count        allowed_error_rate = 1 - self.slo        return actual_error_rate / allowed_error_rate     def should_freeze(self):        return self.remaining() == 0  def simulate():    monitor = ErrorBudgetMonitor(slo=0.99, total_requests=10000)    for minute in range(30):        peak = 10 <= minute <= 20        request_count = int(200 * 1.5 if peak else 200)        for _ in range(request_count):            success = random.random() < 0.99            monitor.record(success)        freeze = "FREEZE" if monitor.should_freeze() else "OK"        print("minute", minute,              "remaining", monitor.remaining(),              "burn_rate", round(monitor.burn_rate(), 2),              freeze)  if __name__ == "__main__":    simulate()
目的:模拟一个SLO为99%的微服务在30分钟内的错误预算消耗过程,输出剩余预算、燃烧速率和是否触发发布冻结。
  1. self.error_budget = int((1 - slo) * total_requests)把SLO的允许错误率换算成可容忍的失败请求次数,这是整个监控器的“总钱袋子”。
  2. self.fail_count` / `self.req_count分别累计失败请求和总请求,用于实时计算当前SLI。
  3. def record(self, success)每来一个请求就记录一次,成功与否会更新内部计数器,并返回最新剩余预算。
  4. def remaining(self)用初始错误预算减去已失败数,得到当前“还能错多少次”的余额。
  5. def burn_rate(self)用当前实际错误率除以允许错误率,大于1说明错误预算消耗过快,风险极高。
  6. def should_freeze(self)余额归零时返回True,模拟发布门禁的“冻结”决策。
  7. peak = 10 <= minute <= 20模拟大促高峰,高峰期的请求量放大1.5倍,让错误预算消耗加速更加真实。
  8. random.random() < 0.99用随机数模拟每个请求是否成功,实际线上会替换为真实的SLI上报数据。

常见误区

误区把SLO定到99.999%才能体现团队水平,反正监控看板上数字越接近100%越好看,系统挂了再修复就行。

正解SLO越高,需要的冗余成本越高。从99.9%提升到99.99%,往往要付出几倍的机器和架构复杂度。就像奶茶店承诺“100%五分钟出杯”,那就得在深夜也保留5个店员——这显然不划算。SLO应该是业务成本与用户体验之间的平衡点,而不是工程师的“面子工程”。

为何常见:很多人把SLO当成一个“荣誉指标”,以为定得越高越显得可靠,却忽略了可靠性背后是实打实的成本投入。

误区SLA就是SLO,反正都是承诺服务可用性的数字,跟客户签合同的时候直接写“可用性99.9%”就行了。

正解SLA是与客户签订的合同,包含赔偿条款;SLO是团队内部给自己定的目标,通常比SLA更严格,或者与SLA挂钩但没有法律效力。一个服务可以在没有SLA的情况下运行,但内部SLO是驱动研发改进的核心机制。就像奶茶店的“免单承诺”是SLA,而店内的“95%出杯目标”是SLO,两者不能混为一谈。

为何常见:因为它们都是描述“服务可靠程度”的百分比,初学者容易把“合同”和“目标”画上等号。

误区错误预算月底看一眼就行,平时只要SLI看板还是绿色,就不用管它;反正预算没归零就能继续发版。

正解错误预算是“存量”,消耗速率才是“风险”。如果预算在一小时内烧掉了50%,即使余额还有20%,也必须立刻停止发布并排查。就像你银行卡里还有3000元,但刚买的理财产品一小时就亏了一半——正常的判断肯定是马上止损,而不是等下个月再看账单。

为何常见:人脑天然关注“还剩多少”而不是“消耗多快”,而SLO工程恰恰强调用速率类指标提前预警,不能等到归零才响应。

误区把服务日志里的所有HTTP请求都拿来做SLI统计,包括健康检查探针、爬虫流量、内部调试请求,认为这样最“全面准确”。

正解SLI的目的是反映真实用户体验,健康检查、爬虫、内网调试请求都会污染指标。正确做法是过滤掉非用户流量,从用户可感知的入口定义“好请求”。就像统计“出杯时间”时,不能把店员自己试做的奶茶也算进去,否则数据再大也不代表顾客的真实感受。

为何常见:采集日志时“全量收集”是运维习惯,但SLI是用户视角指标,需要刻意筛选,两者目标不同。

误区只要把SLO看板挂到办公室大屏幕上,团队就会自动重视稳定性,故障也没那么多了。

正解看板只是“看到问题”,SLO工程的价值在于“闭环管理”:告警响应、值班流程、发布门禁、定期复盘缺一不可。没有流程配合,看板上的红色告警只会被大家看习惯,变成“狼来了”的背景板。

为何常见:工具建设是可见的、容易的,而流程变革是缓慢的、需要组织推动的,人们倾向于用工具的努力掩盖流程的缺失。

面试题

Q1. 在SLA、SLO、SLI三者中,哪一个是对外的正式服务合同?

单选题 · easy

  • A.衡量服务质量的指标
  • B.服务方承诺达到的目标
  • C.双方签订的服务合同← 正确答案
  • D.用于计算赔偿的额度

答案:C。SLA(Service Level Agreement)是服务方与客户之间签订的合同,包含可用性要求和赔偿条款;SLO是内部目标,SLI是具体指标。故选C。

Q2. 下列哪组指标最适合作为“用户能否正常访问服务”的SLI?

单选题 · easy

  • A.数据库连接池空闲数
  • B.服务器CPU使用率
  • C.请求成功率与时延← 正确答案
  • D.磁盘剩余容量大小

答案:C。SLI应从用户体验视角定义,请求成功率反映“能用吗”,时延反映“快不快”,两者是核心。CPU、磁盘是系统内部指标,与用户体感不是直接对应关系。

Q3. 以下哪些属于Google SRE提出的“四个黄金信号”?

多选题 · mid

  • A.延迟← 正确答案
  • B.流量← 正确答案
  • C.错误← 正确答案
  • D.成本

答案:ABC。四个黄金信号是延迟、流量、错误、饱和度。成本不是黄金信号,它是成本管理范畴的指标,不直接描述系统是否健康。

Q4. 错误预算的计算方式通常是什么?

单选题 · mid

  • A.总请求数乘以一减SLO← 正确答案
  • B.总请求数乘上SLO值
  • C.总请求数乘上SLA值
  • D.失败请求数除以总请求数

答案:A。错误预算 = (1 - SLO) × 总请求数。它把“允许出错的比例”转换成“可容忍的失败次数”,是SLO管理的基础。D是SLI的公式,B和C理解有误。

Q5. 设计SLI指标时,最关键的原则是什么?

单选题 · mid

  • A.优先考虑服务器视角
  • B.从用户体验视角定义← 正确答案
  • C.指标采集越全越好
  • D.日志条数越多越好

答案:B。SLI设计的出发点必须是“用户的成功请求占比”,而不是服务器内部状态。采集全面不等于有效,指标要少而精准地反映用户体感。

Q6. 当错误预算耗尽时,团队应该采取哪些合理措施?

多选题 · hard

  • A.暂时冻结新功能发布← 正确答案
  • B.加大稳定性修复投入← 正确答案
  • C.立即下调SLO目标
  • D.忽略错误继续迭代

答案:AB。预算耗尽意味着“可靠性已经被透支”,此时应冻结发布、集中资源修复稳定性。下调SLO是“改合同”而不是“解决问题”,继续迭代会加重风险。

Q7. 当错误预算燃烧率超过SLO容忍值的多倍时,正确的操作是?

单选题 · hard

  • A.继续按原计划发布版本
  • B.暂停发布并优先排查根因← 正确答案
  • C.只增加服务器资源数量
  • D.关闭告警避免打扰值班

答案:B。燃烧率异常说明系统正以远超预期的速度消耗预算,继续发布会加速恶化。正确做法是暂停发布、查根因;只加资源可能掩盖真实问题,关闭告警更是自欺欺人。

Q8. 在可观测性平台中,SLI自动采集通常通过什么方式实现?

单选题 · mid

  • A.链路追踪采样分析
  • B.服务埋点加指标抓取← 正确答案
  • C.人工填写Excel表格
  • D.用户问卷调研反馈

答案:B。标准做法是通过埋点暴露指标,再由Prometheus等服务定期抓取。链路追踪可作为补充分析手段,不能替代标准化指标采集;问卷和手动填报无法满足实时性要求。

Q9. AIOps在SLO工程中可发挥哪些作用?

多选题 · hard

  • A.自动识别告警风暴← 正确答案
  • B.预测错误预算消耗← 正确答案
  • C.自动定位故障根因← 正确答案
  • D.完全替代人工值班

答案:ABC。AIOps可以自动识别异常模式、用时间序列模型预测预算消耗趋势、辅助根因分析。但它不能完全替代人工值班,关键决策仍需SRE确认。

Q10. 某服务SLO为99.9%,某月累计不可用时长90分钟,该月是否满足SLA要求?

单选题 · extreme

  • A.满足,因为仅允许43分钟
  • B.不满足,因为允许约43分钟← 正确答案
  • C.满足,因为尚在144分钟内
  • D.无法判断,缺少请求量

答案:B。一个月按30天×1440分钟=43200分钟计算,99.9%的可用性允许43.2分钟不可用。累计90分钟远超43.2分钟,因此不满足SLA要求。D不对,因为可用性百分比本身就可以用时间推算,不需要请求量。