跳至主内容
博客

Opsgenie 迁移指南:如何把值班和告警迁到 Flashduty

Opsgenie 将于 2027 年 4 月 5 日停服。本文给出迁到 Flashduty 的完整步骤:用 Opsgenie API 导出团队、排班、升级策略和集成,逐项对应到 Flashduty,并行验证后按告警源逐个切换。

Flashduty 支持团队

Opsgenie 迁移指南:如何把值班和告警迁到 Flashduty

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 团队,加上一个或多个协作空间。

OpsgenieFlashduty说明
用户、联系方式成员、个人设置手机和邮箱由成员本人验证
通知规则(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 仅限私有化版本。成员到齐后建团队、分配成员。

然后每个成员在个人设置里做两件事:

  1. 验证手机和邮箱。 手机未验证收不到短信和语音,邮箱未验证收不到邮件通知。
  2. 按故障等级设置通知偏好。 故障分派场景下,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 先不停,每个告警源同时推两边,跑一段时间。然后按协作空间逐个验证:

  1. 发一条测试告警到标准告警集成,推送地址从集成详情页复制:
curl -X POST '<集成详情页上的推送地址>' \
  -H 'Content-Type: application/json' \
  -d '{"event_status": "Critical", "title_rule": "迁移测试:订单服务", "alert_key": "migration-test-1", "labels": {"service": "checkout"}}'
  1. 确认通知到了对的人,走的是他自己配的渠道,至少验证一次电话。
  2. 故意不认领,确认超时后升级到下一环节。
  3. 关闭测试告警:用同一个 alert_key 再发一条 "event_status": "Ok"。不发恢复事件,告警会一直开着。
  4. 在真实交接班时检查临时调班和交接通知。

如果集成详情页没有显示"最新事件时间",说明 Flashduty 没收到这个源的推送,先查发送方。

第七步:切换并关闭 Opsgenie

按告警源一个一个切,先从告警量小的开始。每个源:

  1. 只推 Flashduty,不再推 Opsgenie。
  2. 观察几天真实告警。
  3. 停用 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 文档。

相关阅读