值班自动化基础:值班表概念、轮值策略与时间窗口配置
值班自动化是 SRE 运维体系的核心环节,它确保告警、事件和变更审批始终有对应的人员负责。Opsgenie 通过灵活的轮值策略和时间窗口配置,将“人”与“职责”精确绑定。本章将深入剖析值班表的核心概念、三种轮值策略的适用场景,以及时间窗口的配置要点。
2.1 值班表核心概念
在 Opsgenie 中,值班表(Schedule)是一个时间轴上的职责分配容器。它定义了在特定时间段内,哪些用户或团队负责处理告警。理解以下基础概念是配置值班自动化的前提:
- 轮值(Rotation): 值班表内的基本调度单元,定义了参与人员、轮换顺序和轮换周期。
- 参与者(Participant): 可以是单个用户、用户组或团队。参与者被分配到轮值中,并按顺序接管职责。
- 轮换顺序(Order): 参与者在一个轮值周期内的排列顺序,决定了谁先值班、谁后值班。
- 轮换周期(Rotation Length): 每个参与者连续值班的时长,例如 1 天、1 周或 2 周。
- 时间窗口(Time Restriction): 值班表或轮值生效的具体时间段,例如仅在工作日 09:00-18:00 生效。
基线核验要点: 创建值班表前,务必确认所有参与者已在 Opsgenie 中激活账号并配置了正确的通知方式(电话、短信、邮件、App 推送)。未激活的参与者会导致告警无人响应。
2.2 轮值策略:单轮、多轮与分层
Opsgenie 支持三种核心轮值策略,分别对应不同的运维规模和职责划分需求。选择错误的策略可能导致值班人员过载或职责混乱。
| 策略类型 | 核心特点 | 适用场景 | 典型配置 |
|---|---|---|---|
| 单轮(Single Rotation) | 一个轮值内所有参与者按顺序循环;同一时间只有一人值班。 | 小型团队(3-5人)、初级值班、非关键业务。 | 参与者:张三、李四、王五;周期:7天;顺序:张三→李四→王五。 |
| 多轮(Multiple Rotations) | 一个值班表内包含多个独立的轮值,每个轮值可以有不同的参与者、周期和顺序。 | 中型团队(6-15人)、需要区分主备值班、跨时区团队。 | 轮值A(主班):周期1天;轮值B(备班):周期7天。 |
| 分层(Layered Rotations) | 多个轮值按优先级叠加,高级别轮值覆盖低级别轮值;通常用于 Escalation 场景。 | 大型团队(15人以上)、需要逐级升级、关键业务 7x24 小时保障。 | L1(一线):周期1天;L2(二线):周期7天;L3(专家):周期14天。 |
策略选择建议:
- 如果团队人数少于 5 人且告警量不大,优先使用单轮,配置简单,管理成本低。
- 如果需要区分“主值班”和“备值班”,或团队分布在多个时区,使用多轮,让每个时区独立轮换。
- 如果业务要求告警必须在 15 分钟内响应,且一线无法处理时自动升级到二线,必须使用分层策略。
2.3 轮值策略对比流程图
下图展示了三种轮值策略在时间轴上的职责分配差异,帮助直观理解“谁在什么时候负责”。
2.4 值班时间窗口配置
时间窗口(Time Restriction)决定了值班表或轮值在什么时间生效。合理配置时间窗口可以避免非工作时间打扰,同时确保关键时段有人值守。
2.4.1 时间窗口类型
| 类型 | 配置方式 | 典型示例 |
|---|---|---|
| 按天/周 | 选择一周中的某几天,并设置起止时间。 | 周一至周五,09:00 - 18:00 |
| 按日期范围 | 指定具体的开始日期和结束日期。 | 2025-01-01 至 2025-01-07(春节值班) |
| 自定义重复 | 使用 Cron 表达式定义复杂的重复规则。 | 每周六 00:00 至 周一 00:00(周末值班) |
2.4.2 配置步骤与基线核验
- 进入值班表编辑页面: 在 Opsgenie 控制台选择 Schedules → 选择目标值班表 → 点击 Edit。
- 添加时间窗口: 在 Rotation 设置中,找到 Time Restriction 部分,点击 Add Restriction。
- 选择类型并配置:
- 如果是“按天/周”,勾选生效的星期几,并设置开始时间和结束时间。
- 如果是“按日期范围”,输入 Start Date 和 End Date。
- 如果是“自定义重复”,输入 Cron 表达式(例如
0 9 * * 1-5表示周一至周五 09:00)。
- 保存并验证: 点击 Save,然后使用 Schedule Timeline 视图查看时间窗口是否按预期生效。
常见配置陷阱:
- 时区不一致: 值班表默认使用创建者的时区。如果团队成员分布在多个时区,务必在值班表设置中显式指定时区(例如 UTC+8)。
- 时间窗口重叠: 如果同一个值班表内多个轮值的时间窗口重叠,Opsgenie 会按照轮值优先级(Priority)决定谁负责。优先级高的轮值会覆盖优先级低的轮值。
- 未设置时间窗口: 如果不设置时间窗口,轮值将 7x24 小时生效。对于非关键业务,建议至少设置一个“非工作时间”的降级窗口。
2.5 时间窗口与轮值策略的组合配置
在实际运维中,时间窗口通常与轮值策略组合使用,以实现更精细的职责划分。例如:
- 工作日/周末分离: 使用多轮策略,轮值A配置工作日时间窗口(周一至周五 09:00-18:00),轮值B配置周末时间窗口(周六至周日 00:00-24:00)。
- 日间/夜间分离: 使用分层策略,L1 配置日间窗口(09:00-21:00),L2 配置夜间窗口(21:00-09:00),确保全天覆盖。
- 节假日特殊排班: 使用单轮策略,但添加一个临时的日期范围时间窗口(例如 2025-10-01 至 2025-10-07),覆盖法定节假日。
基线核验清单:
- 确认所有参与者的时区与值班表时区一致。
- 使用 Schedule Timeline 视图检查未来 4 周的值班安排,确保没有空档期。
- 测试告警路由:创建一个测试告警,确认它被正确路由到当前值班人员。
- 检查通知策略:确保值班人员的通知方式(电话、短信、App)已启用且配置正确。
2.6 值班表配置示例(代码片段)
以下是通过 Opsgenie API 创建值班表的 JSON 示例,展示了单轮策略与时间窗口的组合配置:
{
"name": "SRE 一线值班",
"description": "工作日 09:00-18:00 一线值班",
"timezone": "Asia/Shanghai",
"rotations": [
{
"name": "主班轮值",
"participants": [
{"type": "user", "id": "user-张三"},
{"type": "user", "id": "user-李四"},
{"type": "user", "id": "user-王五"}
],
"order": 1,
"period": {
"type": "weekly",
"interval": 1
},
"timeRestrictions": [
{
"type": "weekdayAndTime",
"restriction": {
"startDay": "Monday",
"endDay": "Friday",
"startHour": 9,
"startMin": 0,
"endHour": 18,
"endMin": 0
}
}
]
}
]
}
API 核验提示: 使用
GET /v2/schedules/{scheduleId}/timeline 接口可以获取值班表的时间线数据,用于自动化核验值班安排是否符合预期。建议在 CI/CD 流程中加入此核验步骤。