TL;DR: Atlassian 已于 2025 年 6 月 4 日停售 Opsgenie,2027 年 4 月 5 日停服,届时未迁入 Jira Service Management 的数据会被删除。官方应用内迁移工具只通向 Jira Service Management。迁到 Flashduty 是重建,不是导入:目前没有 Opsgenie 自动导入工具。本文按实际操作顺序展开:先用 Opsgenie REST API 导出配置,再把每个 Opsgenie 对象对应到 Flashduty,依次重建成员、值班表、分派策略和集成,两边并行跑测试告警,最后按告警源逐个切换并关闭 Opsgenie。
如果还在选型,先看 Opsgenie 替代方案 2026 和 Flashduty vs Opsgenie 对比页。本文默认你已经决定迁到 Flashduty,只讲怎么迁。
截止日期
以下内容来自 Atlassian 官方的 Opsgenie Licensing FAQ:
- 2025 年 6 月 4 日停售。 不能新购,不能升降级套餐;续订只允许订阅期在 2027 年 4 月 5 日之前结束。
- 2027 年 4 月 5 日停止支持。 Opsgenie 关闭访问,产品不再可用,没有迁入 Jira Service Management 的客户数据会被删除。
不走 Atlassian 的路径,就没有人替你搬数据。配置和告警历史,凡是想留的,都要趁 API 还能用时自己导出。
Opsgenie 概念与 Flashduty 的对应关系
结构上最大的差别:Opsgenie 的团队(Team)同时拥有值班表、升级策略、集成和路由规则;Flashduty 把这些拆成两层。团队只是一组人;协作空间是"管理故障的最小单元",把某个业务的告警、集成、分派策略和人员权限放在一起。一个 Opsgenie 团队通常对应一个 Flashduty 团队,加上一个或多个协作空间。
| Opsgenie | Flashduty | 说明 |
|---|---|---|
| 用户、联系方式 | 成员、个人设置 | 手机和邮箱由成员本人验证 |
| 通知规则(Notification rules) | 通知偏好 | 按故障等级 Critical / Warning / Info 分别设置 |
| 团队(Teams) | 团队 + 协作空间 | 人放在团队里,告警、集成、分派放在协作空间里 |
| 服务(Services) | 协作空间 | 起步时一个服务建一个协作空间 |
| 值班表、轮换(Schedules、Rotations) | 值班表的值班层和轮换 | 时区在创建时确定,之后不能改 |
| 临时替班(Overrides) | 临时调班 | 生效窗口内完全替换正常规则 |
| 升级策略(Escalation policies) | 分派策略 | 建在协作空间内 |
| 团队路由规则(Team routing rules) | 分派策略的故障筛选,或共享集成的路由规则 | |
| 集成(Integrations) | 专属集成(建在协作空间内)或共享集成(建在集成中心) | |
| 告警策略、集成动作(Alert policies、Integration actions) | 告警处理 | 在集成层清洗、转换、过滤告警 |
| 维护(Maintenance) | 静默策略 | 单次、按星期周期、按服务日历 |
| 告警(Alerts) | 告警 | 相同 alert_key 的事件合入同一条告警 |
| 事件(Incidents) | 故障 | 故障是相似告警的组合 |
| 心跳(Heartbeats) | 集成的静默检测 | 只能部分替代,见文末 |
| 转发规则(Forwarding rules) | 无对应功能 | 用值班表的临时调班代替 |
API Key(GenieKey) | APP Key |
第一步:导出 Opsgenie 配置
先导出,再动手重建。导出的文件既是重建时的依据,也是 2027 年 4 月之后唯一留下的记录。
Opsgenie REST API 用请求头 Authorization: GenieKey <你的 API Key> 鉴权,地址是 api.opsgenie.com,EU 区账号用 api.eu.opsgenie.com。用一把有读取配置权限的 Key,每个接口的返回都存成 JSON 文件。
| 导出内容 | 接口 |
|---|---|
| 用户 | GET /v2/users |
| 每个用户的联系方式 | GET /v2/users/{id}/contacts |
| 每个用户的通知规则 | GET /v2/users/{id}/notification-rules |
| 每个用户的转发规则 | GET /v2/users/{id}/forwarding-rules |
| 团队 | GET /v2/teams,再用 GET /v2/teams/{id} 取成员 |
| 团队路由规则 | GET /v2/teams/{id}/routing-rules |
| 值班表 | GET /v2/schedules?expand=rotation |
| 轮换 | GET /v2/schedules/{id}/rotations |
| 临时替班 | GET /v2/schedules/{id}/overrides |
| 按日期查谁在值班 | GET /v2/schedules/{id}/timeline |
| 值班表日历文件 | GET /v2/schedules/{id}.ics |
| 升级策略 | GET /v2/escalations |
| 集成 | GET /v2/integrations,再用 GET /v2/integrations/{id}/actions 取动作 |
| 心跳 | GET /v2/heartbeats |
| 维护 | GET /v1/maintenance |
| 告警策略 | GET /v2/policies/alert?teamId={id} |
| 告警历史 | GET /v2/alerts(用 offset、limit 分页) |
| 事件 | GET /v1/incidents/ |
最简单的导出脚本:
OG=https://api.opsgenie.com
KEY=your-opsgenie-api-key
for path in users teams schedules escalations integrations heartbeats; do
curl -s "$OG/v2/$path" -H "Authorization: GenieKey $KEY" > "opsgenie-$path.json"
done
再遍历这些文件里的 ID,调用按用户、按团队、按值班表的接口。有两样东西 API 导不出来,需要手工记下:哪些监控系统在往哪个 Opsgenie 集成推告警(配置在发送方那边),以及团队依赖但从没写下来的习惯,比如某个人事实上一直是第二响应人。
第二步:邀请成员,配好通知
Flashduty 支持邀请链接或二维码、邮件、手机号、Open API、SSO 自动创建几种方式加人。单点登录支持 SAML2.0、OIDC、CAS,LDAP 仅限私有化版本。成员到齐后建团队、分配成员。
然后每个成员在个人设置里做两件事:
- 验证手机和邮箱。 手机未验证收不到短信和语音,邮箱未验证收不到邮件通知。
- 按故障等级设置通知偏好。 故障分派场景下,Critical、Warning、Info 三个等级可以分别选择语音、短信、邮件、Flashduty APP 和 IM 应用。这一项取代 Opsgenie 的通知规则。
装上 Flashduty APP。iOS 端用的是 Apple 关键警报(Critical Alerts),Critical 级别的故障通知可以穿透静音和勿扰模式。
IM 方面,Flashduty 有飞书、钉钉、企业微信、Slack、Microsoft Teams 的应用集成,故障卡片可以直接在 IM 里操作。另有群机器人(Webhook)方式,支持飞书、钉钉、企业微信、Slack、Telegram、Zoom,机器人消息只能跳转链接,不能卡片交互。
第三步:重建值班表
把 .ics 导出文件和轮换 JSON 对照着看。Flashduty 的值班表:
- 时区在创建时必填,创建后不能修改。 先对齐 Opsgenie 值班表的时区,再加规则。
- 一张值班表可以有多个值班层(比如白班一层、夜班一层),叠加成最终排班,对应 Opsgenie 一张值班表里的多条轮换。
- 轮换周期支持小时、天、周、月四种单位,数值 1~30。周期合计为 1 周时,可以指定周几几点交接。
- 支持日期掩码(选一周中哪几天由这一层值班)和公平轮换(自动调整顺序,避免同一个人总在休息日值班)。
- 请假、换班用临时调班:生效窗口内完全替换所有正常规则,窗口结束自动恢复。
- 可以在交接前 N 分钟发提前通知,也可以每天定时通知当前值班人,渠道包括 IM、短信、邮件。
建完后,把 Flashduty 日历上未来四周的排班和 Opsgenie timeline 接口同期的结果逐天对比。对不上的地方,多半是时区或交接时间。
第四步:建协作空间和分派策略
按前面的对应表,给每个服务或团队建协作空间。在协作空间里,把每条 Opsgenie 升级策略重建为分派策略:
- 通知对象:值班表(推荐)、团队、个人,或组合。
- 多级升级:当前环节无人响应时自动升级到下一环节。条件可选"未关闭"或"未关闭且未认领",超时最小 1 分钟,默认 30 分钟。
- 重复通知:同一环节内按间隔重复通知,间隔最小 0.5 分钟,可设最多次数。
- 生效时间:始终生效、指定时间段(如工作日 9:00-18:00),或引用服务日历自动排除节假日。
- 通知方式:遵循成员个人偏好,或统一指定(比如必须发短信)。
- 匹配顺序:从上到下匹配,命中后不再匹配后面的策略;可按集成来源、严重程度、标题、描述、标签筛选故障。Opsgenie 的团队路由规则一般落在这里。
第五步:接入告警源
每个 Opsgenie 集成都要在 Flashduty 建一个对应集成,分两种:
- 专属集成:建在协作空间里,告警直接进入这个空间。
- 共享集成:建在集成中心,通过路由规则分发到不同协作空间。共享集成至少要配一条路由规则,否则告警会被丢弃。
常见告警源的接入文档:Prometheus Alertmanager、Zabbix、Grafana、Datadog、AWS CloudWatch、邮件。自研脚本和没有专门集成的系统,用标准告警事件接口;它还支持字段映射和值映射,任意 JSON 都能接。
Flashduty 不兼容 Opsgenie 的告警 API 格式,原来直接调 api.opsgenie.com 的地方都要改目标。Flashduty 实现了 PagerDuty Events API v1 和 v2,已经能往 PagerDuty 推送的工具,把地址改成 Flashduty 即可。
降噪在协作空间上配置(告警降噪):
- 事件聚合:新建协作空间默认开启,相同
alert_key的事件在 24 小时内合入同一条告警。 - 告警聚合(多条告警合成一个故障):新建协作空间默认关闭,未开启时每条告警各自生成一个故障。
- 静默策略:取代 Opsgenie 的维护功能,支持单次、按星期周期、按服务日历三种方式。
第六步:两边并行,用测试告警验证
Opsgenie 先不停,每个告警源同时推两边,跑一段时间。然后按协作空间逐个验证:
- 发一条测试告警到标准告警集成,推送地址从集成详情页复制:
curl -X POST '<集成详情页上的推送地址>' \
-H 'Content-Type: application/json' \
-d '{"event_status": "Critical", "title_rule": "迁移测试:订单服务", "alert_key": "migration-test-1", "labels": {"service": "checkout"}}'
- 确认通知到了对的人,走的是他自己配的渠道,至少验证一次电话。
- 故意不认领,确认超时后升级到下一环节。
- 关闭测试告警:用同一个
alert_key再发一条"event_status": "Ok"。不发恢复事件,告警会一直开着。 - 在真实交接班时检查临时调班和交接通知。
如果集成详情页没有显示"最新事件时间",说明 Flashduty 没收到这个源的推送,先查发送方。
第七步:切换并关闭 Opsgenie
按告警源一个一个切,先从告警量小的开始。每个源:
- 只推 Flashduty,不再推 Opsgenie。
- 观察几天真实告警。
- 停用 Opsgenie 里对应的集成。
最后一个源切完后,再导出一遍要保留的数据,尤其是 GET /v2/alerts 的告警历史,然后退订 Opsgenie。全部工作要在 2027 年 4 月 5 日之前留出余量完成。
用代码管理配置
如果原来用 Terraform 管 Opsgenie,Flashduty 也有 Terraform Provider(flashcatcloud/flashduty),覆盖团队、协作空间、值班表、分派策略、路由、静默策略、抑制策略、告警处理、通知模板、字段、故障和成员邀请。临时调班和集成不在 Terraform 资源里,需要在控制台或通过 Open API 创建,Open API 用 APP Key 鉴权。
Flashduty 做法不同或没有的地方
开始之前先把这几项排进计划:
- 没有 Opsgenie 自动导入工具。 第二步到第五步需要手工、调 API 或用 Terraform 重建。
- 心跳。 Flashduty 没有按任务分配的心跳地址。集成上的静默检测在指定时间内(10 分钟到 48 小时)没收到有效事件时,生成一条 Warning 告警,能发现"某个监控源不再推送",发现不了"某个定时任务没跑"。任务级的检查继续放在调度系统或监控系统里,由它们把告警推给 Flashduty。
- 值班表不能导出日历。 没有 iCal 订阅,用交接提前通知和每日值班通知代替。
- 值班表本身不跳过节假日。 标注节假日的服务日历只作用于分派策略和静默策略,不作用于值班表。节假日的班次用临时调班安排。
- 没有个人转发规则。 有人请假时用临时调班覆盖。
- 主备值班角色可以用,但需要联系 Flashduty 技术支持开通,控制台不能自助增删角色。
需要帮助
不想自己做导出和映射,可以申请免费迁移评估:我们的工程师用只读权限读取 Opsgenie 配置,给你一份迁移报告,报告归你。想先自己按上面的步骤试一遍,可以直接注册 Flashduty。
来源(2026 年 10 月 6 日查阅):日期和数据删除条款来自 Atlassian Opsgenie Licensing FAQ;接口路径和 GenieKey 鉴权方式来自 Opsgenie 官方 OpenAPI 规范 opsgenie/opsgenie-oas;请求头格式和 EU 地址来自官方 opsgenie-go-sdk-v2。Flashduty 的功能说明来自 Flashduty 文档。


