schedules.create。
能带过来什么由一条规则决定:从现在起,任何时刻谁值班都不变。这里的排班表达不了、又会改变结果的内容会挡住导入;不影响现在往后值班结果的内容会跳过,并在结果里说明。
步骤
1
加人
把轮值上的人都加进工作区,邮箱和来源里一样,见成员。成员按邮箱对上,不分大小写。
3
预演
打开 告警 → 值班排班,选择 导入导出 → 导入排班…,再选择 选择文件 和 预演。每个排班会列出将发生什么,见读懂结果。
4
解决挡住导入的问题
改来源后重新取,或者编辑文件。有排班出错时什么都不写。
5
导入
选择 导入,打开导入的排班核对谁在值班。把升级策略指向它,通知就开始走这个排班。
Opsgenie
设置一个能读排班的 API Key,再运行脚本。EU 账号用api.eu.opsgenie.com。
data 里是每个排班的 GET /v2/schedules/{id},timelines 里是它的 GET /v2/schedules/{id}/timeline。DAYS 决定时间线往后取多久。
下面这些内容在轮换还生效时会挡住导入:
临时替班、转发规则、升级策略和路由不导入。
PagerDuty
设置一个能读排班和用户的 API Key,再运行脚本。EU 账号用api.eu.pagerduty.com。
schedules 里是每个排班的 GET /schedules/{id} 和 GET /v3/schedules/{id},users 里是 GET /users 的邮箱(排班里的人不带邮箱),shift_based_schedules 里是 GET /v3/schedules 的列表。since 和 until 是 PagerDuty 渲染的范围,DAYS 决定往后取多久。
排班要逐个取,不传 time_zone。GET /schedules 按调用者的时区渲染时段限制,而不是排班的时区;导入认得出按别的时区渲染的排班,会拒绝它。
分层排班
shift-based 排班
PagerDuty 的 V3 API 返回的排班由事件组成。事件之间没有优先级:时间上重叠时,这些事件里的人同时值班。
事件还在生效时,下面这些会挡住导入:
文件里只在
shift_based_schedules 下有名字的 shift-based 排班(例如脚本没取到的)会被跳过,并列在结果里。重新运行脚本就能带过来。文件里其余的排班照常导入。
临时替班、升级策略和服务不导入。
读懂结果
排班下面的其他几行说明跳过了什么,以及和来源对照的结果。
和来源对照
文件里带着来源自己排出来的值班表:PagerDuty 的final_schedule 和 Opsgenie 的时间线。预演算出这段时间谁值班,从现在起和它比。有不同就报错,写明时间和两边的人,什么都不写。
- 临时替班不导入,它占的时段不比。
- shift-based 排班的
final_schedule里同一时刻有几个人值班时,即使事件之间不重叠,也会挡住导入。 - Opsgenie 里已停用的排班带过来也是暂停的,不做对照。
- 对照范围没跨过有夏令时的时区的切换时,结果会说明。这里的交接保持本地时间不变;调大
DAYS可以把下一次切换也比上。 - 文件里没有渲染结果时,结果会说明没有对照,导入继续。从文件里去掉
final_schedule或timelines,就能导入有意不一样的排班。
限制
一个文件最多 4 MiB、500 个排班,一个排班最多 60 条还在生效的轮值。文件太大时调小DAYS。