值班表怎么排才合理?SRE On-call 轮班机制设计指南

从责任边界、主备机制、轮换周期、服务日历、通知偏好、调班与升级策略等角度,系统梳理 SRE On-call 值班表设计方法。

作者 Flashduty

值班表怎么排才合理?SRE On-call 轮班机制设计指南

很多团队的 On-call 问题,不是没有值班人。

而是值班机制本身设计得太随意。

有人靠 Excel 排班。
有人靠群公告。
有人靠团队 Leader 临时指派。
有人长期默认“谁熟悉系统谁兜底”。
有人名义上有值班表,但告警来了还是全群轰炸。
有人排了主备,但没人知道主备分别承担什么责任。

这种状态在系统小的时候还能勉强运行。

但团队一大、服务一多、夜间告警一多,问题很快就会暴露。

值班人疲劳。
故障没人认领。
升级靠人工催。
周末和夜间总是同几个人扛。
值班责任不清,出了问题互相问“今晚是谁看?”

所以,值班表不是把几个人排进日历那么简单。

真正合理的 On-call 轮班机制,要同时回答四个问题:

谁负责第一响应?
没人响应时谁兜底?
不同时间段应该通知谁?
怎么避免长期把压力压给少数人?

值班表的本质,是把故障和人连接起来

很多团队把值班表理解成一个排班日历。

今天张三。
明天李四。
周末王五。
节假日再临时调整。

这只是表面。

值班表真正的作用,是在故障发生时,让系统自动知道“此刻应该通知谁”。

如果值班表不能被告警系统调用,它就只是一个静态文档。

静态文档最大的问题是:关键时刻还要人去查。

告警来了,大家先翻群公告。
查到今天值班人,再手工 @ 他。
没人回复,再找备份人。
备份人也没回复,再找负责人。
整个过程靠人工推进。

这不是 On-call。

这是人工转发告警。

真正的 On-call 机制应该是:告警进入系统后,根据当前时间、告警级别、业务标签、值班表和升级策略,自动通知当前负责人;如果负责人没响应,自动升级到下一环节。

值班表是这条链路里的核心组件。

它把“故障”连接到“当前应该处理的人”。

On-call 响应闭环

先别急着排班,先定义责任范围

很多值班表排不好,是因为一开始就跳到了“谁值哪天”。

这太早了。

排班之前,先要定义责任范围。

这个值班表负责哪些系统?
哪些告警会进入这张值班表?
是业务研发值班,还是 SRE 值班,还是平台值班?
值班人负责第一响应,还是负责真正修复?
数据库、网络、安全、中间件这些专业问题是否有独立升级链路?

如果责任范围不清,值班表一定会变成大杂烩。

比如一个“技术值班表”同时接收办公网络、支付系统、测试环境、数据库、Kubernetes、云监控账单告警。

听起来方便。

但真正故障来了,值班人很难判断优先级,也不一定有权限处理。

更合理的方式,是按责任边界拆分。

核心交易系统可以有交易 SRE 值班。
基础设施可以有平台值班。
数据库可以有 DBA 值班。
网络可以有网络值班。
业务研发可以有服务 Owner 值班。

不是值班表越多越好,而是每张表都要有清晰边界。

一张值班表应该让人一眼看懂:它负责什么,不负责什么。

主备值班不是形式主义

很多团队会设主备值班。

但主备最容易流于形式。

主值班收到告警。
备值班也收到告警。
群里所有人也收到告警。
最后大家都看一眼,但没人知道谁该先认领。

这不是主备。

这是多人围观。

主备机制应该有明确分工。

主值班负责第一响应。

他应该第一时间收到 Critical 告警,打开故障详情,判断影响范围,认领或暂缓,必要时拉起协同。

备值班负责兜底。

如果主值班在规定时间内没有认领,系统自动升级给备值班。备值班不是每条告警都同时处理,而是在主值班不可用、响应超时、故障升级时接手。

负责人负责升级后的管理判断。

如果主备都没有关闭故障,或者故障持续扩大,就应该升级给团队负责人、服务 Owner 或更高级别响应人。

这样主备才有意义。

一条常见策略可以是:

Critical 告警先通知主值班。
5 分钟未认领,升级给备值班。
15 分钟未关闭或未暂缓,升级给服务 Owner。
30 分钟仍未恢复,升级给团队负责人或重大故障群。

具体时间可以按业务调整。

关键不是分钟数,而是升级条件要明确。

轮换周期不要只看公平,还要看疲劳

值班排班最常见的问题,是只看“轮到谁”,不看“值班负担”。

一个人值班一天,和一个人值班一周,体验完全不同。

白天值班和夜间值班不同。
工作日值班和周末值班不同。
低噪音系统和高噪音系统不同。
只收 IM 通知和可能被电话叫醒不同。

所以,排班周期不能拍脑袋。

常见有几种模式。

按天轮换

适合告警量相对稳定、团队人数较多、希望降低单人连续压力的团队。

优点是单次负担短,心理压力小。

缺点是交接频繁。每个人刚进入状态,第二天就换人。对于复杂系统,可能不利于连续跟进问题。

按周轮换

这是很多 SRE 团队常用模式。

优点是责任连续。一个人负责一周,可以持续跟进同一批问题,周报和复盘也更清晰。

缺点是压力集中。如果夜间告警多,一周下来会很累。

按周轮换适合告警降噪已经比较好的团队。如果告警质量很差,按周值班会非常痛苦。

白班 / 夜班拆分

适合 7x24 高强度系统。

白天和夜间的响应方式不同。白天可以依赖办公 IM、团队协作、研发快速介入;夜间更依赖电话、短信、App 推送和升级策略。

把白班和夜班拆开,可以让排班更贴近真实负担。

但管理复杂度也更高,需要更好的工具支持。

工作日 / 周末拆分

周末值班通常比工作日更消耗人。

如果长期随机轮换,可能出现某些人频繁覆盖周末。团队会觉得不公平。

合理的排班应该统计周末、节假日、夜间的分布,尽量让高负担时段公平轮换。

所谓公平,不只是“次数一样”,而是“负担接近”。

服务日历很重要

很多团队只有一张固定值班表,却忽略了业务日历。

这会出问题。

比如:

大促期间应该加强值班。
节假日期间应该提前安排备份。
发布窗口应该让相关研发在岗。
数据库维护窗口应该通知 DBA。
重要活动期间低级别告警也可能需要更高关注。

这类场景不能只靠固定轮班。

它需要服务日历。

服务日历的作用是把业务时间、维护时间、特殊保障时间纳入分派策略。

同一条告警,在普通工作日和大促活动期间,处理方式可能不同。

普通工作日 Warning 只进群。
大促期间同样的 Warning 可能需要通知值班人。
计划维护期间某些告警应该静默。
核心发布窗口出现异常,需要同步发布负责人。

如果值班机制不理解这些时间背景,就会过度通知或漏通知。

所以,成熟的 On-call 机制一定要把值班表和服务日历结合起来。

不要所有告警都走同一张值班表

这是另一个常见错误。

为了简单,很多团队把所有告警都发给同一个值班表。

CPU 高也发。
支付失败也发。
数据库慢查询也发。
测试环境异常也发。
办公网络不通也发。
低级别 Warning 也发。

这会把值班人变成告警垃圾桶。

值班表应该和分派策略配合。

不同告警走不同路径。

按严重级别分:

Critical 进入主值班和升级链路。
Warning 进入 IM 群或工作时间处理。
Info 只记录,不打扰人。

按业务线分:

支付告警通知支付值班。
订单告警通知订单值班。
平台告警通知平台值班。
数据库告警通知 DBA 值班。

按时间分:

工作时间可以先通知团队群。
夜间只通知真正需要立即处理的 Critical。
维护窗口内的已知告警静默或降级。

按环境分:

生产环境走正式 On-call。
测试环境进入低优先级通道。
预发环境可以只通知相关研发。

值班表不是唯一规则。

它要和告警标签、严重级别、服务日历、通知方式、升级条件一起工作。

告警分派策略地图

值班人需要通知偏好

很多团队只关注“通知到谁”,忽略“怎么通知”。

这也会影响响应效果。

不同严重级别应该有不同通知方式。

Critical 可以 App 推送 + IM 单聊 + 必要时电话。
Warning 可以 IM 群通知。
Info 可以只进列表或日报。

不同时间段也应该不同。

白天 IM 可能足够。
夜间关键告警要有 App、短信或语音兜底。
睡眠时间不应该被低级别告警打断。

个人也需要通知偏好。

有的人更依赖 App。
有的人更依赖电话。
有的人在境外或出差,短信和电话策略可能不同。
有的人临时请假,需要调班。

如果通知偏好不可配置,On-call 很容易变成粗暴打扰。

好的值班机制应该做到:关键故障一定触达,低价值告警尽量不打扰。

这两件事都重要。

只强调触达,会把人打疲劳。
只强调少打扰,会漏掉关键故障。

调班机制必须简单

值班表最怕两种情况。

一种是排完没人维护。

另一种是调班太麻烦。

现实里,值班人会请假、出差、生病、临时有事,也会遇到家庭安排、活动保障、节假日调整。

如果调班流程复杂,大家就会在群里口头约定。

“今晚我替你。”
“周末你帮我看一下。”
“这两天我不在,有事找他。”

这些口头约定最危险。

系统不知道。

告警来了,仍然通知原值班人。原值班人以为别人替了,替班人以为只是帮忙看一眼,最后故障没人认领。

所以,调班必须进入系统。

临时调班、假期覆盖、主备替换,都应该在值班表里体现,并且能被分派策略实时使用。

一个值班工具好不好用,很大程度取决于调班是否简单。

因为排班一年一次,调班每个月都可能发生。

升级策略比值班表更容易被低估

有值班表,不代表有 On-call 闭环。

如果主值班没响应怎么办?

很多团队的答案是:群里再喊一下。

这不可靠。

升级策略应该自动化。

常见升级条件有两类:

未认领升级。

也就是故障触发后,指定时间内没人认领,就升级到备值班或负责人。这适合保证第一响应。

未关闭升级。

也就是故障持续未恢复或未关闭,达到一定时间后继续升级。这适合保证问题持续被关注。

这两个条件要区分。

一个故障可能已经被认领,但还没恢复。如果一直未关闭,说明影响可能持续,需要更高层级介入。

另一个故障可能没人认领,这时要尽快找备份人。

好的升级链路通常会包括:

主值班。
备值班。
服务 Owner。
团队负责人。
重大故障响应群。

不是每条故障都要走完整链路。

但 Critical 告警必须有明确升级路径。

否则值班表只是“通知一次”,不是响应机制。

排班是否合理,要用数据看

很多团队讨论排班公平,最后容易变成主观感受。

有人觉得自己夜里被吵太多。
有人觉得周末总轮到自己。
有人觉得某个服务太吵。
有人觉得主值班压力比备值班大很多。

这些感受都可能是真的。

但要治理,就要变成数据。

至少应该看几个指标。

每个人被分派次数。
每个人夜间通知次数。
每个人周末通知次数。
每个人 MTTA。
每个人响应投入。
每个值班表触发的故障数量。
每个服务贡献的夜间告警数量。
升级次数和升级原因。

如果某个人长期响应投入高,就要看是排班不均,还是他负责的服务噪音太大。

如果某个值班表经常升级,就要看是通知触达问题,还是值班人负担过重。

如果夜间中断集中来自几个低价值告警,就应该治理规则,而不是继续调整排班。

排班公平不是靠感觉维护的。

它要靠数据反馈。

小团队怎么排

小团队最常见的问题是人少。

如果只有 3 到 5 个人,想做严格 7x24 主备值班,压力会很大。

这时不要盲目模仿大厂。

更现实的方式是分层。

核心业务 Critical 告警必须有人响应。
低级别告警只在工作时间处理。
夜间只保留少量真正需要叫醒人的告警。
周末采用轻量主备,避免所有人同时被打扰。

小团队尤其要重视告警降噪。

因为人少,任何低质量告警都会直接消耗团队。

如果告警质量没有治理好,小团队做 On-call 会非常痛苦。

对小团队来说,值班表不是越复杂越好。

先做一张最小可用值班表:

每周轮换一次。
一个主值班。
一个备值班。
Critical 先通知主值班,未认领升级备值班。
Warning 只进工作群。
维护窗口静默。

跑起来之后,再根据数据调整。

中大型团队怎么排

中大型团队的问题不是人少,而是责任复杂。

多个业务线。
多个基础平台。
多个研发团队。
多个专业角色。
多个环境和地区。

这时最重要的是分层分域。

不要试图用一张总值班表解决所有问题。

可以按职责拆:

业务线值班。
平台 SRE 值班。
数据库值班。
网络值班。
安全值班。
重大故障管理值班。

然后用分派策略把告警路由到正确值班表。

比如:

team=paymentseverity=critical,通知支付主值班。
component=mysql,通知 DBA 值班。
service=kubernetes,通知平台值班。
severity=critical 且持续未关闭,升级重大故障管理值班。

中大型团队还要重视权限和审计。

谁能改值班表?
谁能临时调班?
谁能修改分派策略?
谁能关闭故障?
谁能查看其他团队故障?

这些问题如果不管理,On-call 平台会变成另一个混乱入口。

一个可落地的值班表模板

如果你现在还没有正式值班机制,可以从这个模板开始。

值班对象:核心生产系统。
参与人员:4 到 8 人。
轮换周期:每周轮换。
角色:主值班、备值班。
覆盖时间:7x24,工作时间和非工作时间通知方式不同。
Critical 策略:先通知主值班,5 分钟未认领升级备值班,15 分钟未关闭升级服务 Owner。
Warning 策略:工作时间通知团队群,非工作时间进入列表或延迟通知。
Info 策略:只记录,不主动打扰。
维护窗口:通过服务日历或静默规则处理。
调班:必须在系统里调整,不接受只在群里口头约定。
复盘指标:每周看分派次数、夜间打扰、升级次数、MTTA、MTTR、Top 告警来源。

这个模板不复杂。

但它已经覆盖了 On-call 排班最关键的机制。

很多团队不需要一开始就做复杂的全球轮班、跨时区排班、Follow-the-sun。

先把主备、升级、调班、服务日历和数据反馈跑通,就已经比群公告和 Excel 强很多。

Flashduty 在这里解决什么

Flashduty 的价值不是帮你画一张排班表。

它要解决的是排班表和告警响应之间的连接。

值班表可以按小时、天、周、月轮换,支持白班、夜班、主备、临时调班、日期掩码和公平轮换等场景。

分派策略可以根据告警条件,把故障通知给当前值班人,也可以设置通知方式、延迟窗口、通知模板和升级规则。

当故障触发后,系统会记录分派、通知、认领、暂缓、升级、关闭等时间线。

管理者可以再通过分析看板看响应投入、MTTA、MTTR、中断次数和高频告警来源。

这就把值班从静态日历,变成了可执行、可追踪、可分析的响应机制。

最后

值班表怎么排才合理?

没有一个放之四海皆准的答案。

但有几个原则很稳定。

值班表要有清晰责任范围。
主备要有明确分工。
轮换周期要考虑疲劳,而不是只看次数。
服务日历要覆盖特殊时间。
告警要按级别、业务、环境和时间分派。
调班必须进入系统。
升级策略必须自动化。
排班是否公平,要用数据看。

如果你的团队现在还靠 Excel、群公告和人工 @ 人来做 On-call,不一定要一步到位建设很复杂的体系。

可以先从一张最小可用值班表开始。

选一个核心系统。
确定主备。
配置 Critical 告警分派。
设置未认领升级。
跑一周。
看数据。
再调整。

On-call 机制不是一次设计完美的。

它应该像告警治理一样,持续迭代。

真正重要的是,不要让生产故障长期依赖“谁刚好在线、谁刚好看到群消息、谁比较熟悉系统”。

一个稳定的工程团队,需要把这件事变成机制。

值班表,就是这个机制的起点。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云