Files
aiops-docs/pagerduty/PagerDuty_Feature_Breakdown_and_Replication_Requirements.md

877 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PagerDuty 功能拆解与复刻需求
## 1. 文档目标
本文档用于基于 PagerDuty 公开产品资料,系统梳理其在以下三个方向的核心能力:
- 事件编排Event Orchestration
- 值班排班与升级On-call / Escalation
- 事件复盘与改进闭环Post-Incident Review / Postmortem
目标不是逐字复述官网,而是把 PagerDuty 的能力整理成一份适合产品设计和功能复刻的需求文档,便于后续回答两个问题:
1. 如果先复刻一个 PagerDuty 风格的 Incident Management 平台MVP 应该包含哪些功能。
2. 在完成基础 Incident Management 后AIOps 应该再叠加哪些智能化能力。
说明:
- 本文基于 PagerDuty 官方公开页面与帮助文档整理,不代表其内部 PRD。
- 文中“建议复刻”表示适合纳入你的产品规划,不代表必须完全 1:1 实现。
## 2. PagerDuty 的产品定位
PagerDuty 本质上不是一个单纯“发告警”的工具,而是一套面向生产故障响应的运行管理平台。它解决的问题链路是完整的:
1. 从监控系统、日志系统、CI/CD、云平台接收事件。
2. 对事件进行路由、降噪、抑制、富化和分派。
3. 将事件转化为 `Incident`,并自动通知当前值班人。
4. 在响应过程中组织协同人员、角色、任务和沟通。
5. 在恢复后形成复盘、行动项、分析报表和改进闭环。
因此PagerDuty 的核心价值不是“消息通知”,而是“面向 Incident 生命周期的编排系统”。
## 3. 复刻 PagerDuty 之前先明确的对象模型
如果要复刻 PagerDuty首先需要定义稳定的领域对象。否则后续编排、升级、复盘都会缺少统一模型。
建议优先抽象以下核心对象:
| 对象 | 含义 | 说明 |
| --- | --- | --- |
| `Event` | 外部系统送入的原始事件 | 来自监控、日志、变更、邮件、Webhook 等 |
| `Alert` | 平台内部标准化后的告警 | 可被抑制、分组、去重、转 Incident |
| `Incident` | 需要协同处理的问题实体 | 有状态、负责人、升级链路、时间线 |
| `Service` | 技术服务或受监控对象 | Incident 通常挂在某个 service 上 |
| `Business Service` | 业务服务 | 用于对外状态同步、业务影响展示 |
| `EscalationPolicy` | 升级策略 | 定义未响应时如何升级 |
| `Schedule` | 值班表 | 定义谁在什么时间值班 |
| `Responder` | 响应人 | 当前参与某个 Incident 的人 |
| `Stakeholder` | 干系人/订阅人 | 接收状态更新,但不一定参与处理 |
| `IncidentRole` | 事件角色 | 如 Incident Commander、沟通负责人 |
| `IncidentTask` | 事件任务 | 响应过程中需要被跟踪的具体事项 |
| `PostIncidentReview` | 复盘实体 | 用于复盘、分析、行动项沉淀 |
| `ActionItem` | 改进行动项 | 复盘后的工程任务、流程任务、会议任务 |
PagerDuty 的很多功能之所以可扩展,关键就在于这些对象之间关系稳定,例如:
- `Service -> EscalationPolicy -> Schedule -> On-call User`
- `Event -> Alert -> Incident`
- `Incident -> Responders / Subscribers / Roles / Tasks / Timeline`
- `Incident -> PostIncidentReview -> ActionItems`
## 4. 功能全景
从复刻角度看PagerDuty 可以拆成 6 个能力域:
1. 事件接入与标准化
2. 事件编排与路由
3. 值班排班与升级通知
4. Incident 协同处理
5. 复盘与改进闭环
6. 分析报表与运营洞察
下面逐块展开。
## 5. 事件接入与标准化能力
### 5.1 多入口事件接入
PagerDuty 支持从多种来源触发 Incident 或导入事件,典型入口包括:
- 第三方监控集成
- Events API
- REST API
- Email Integration
- Slack / Mobile / Web 手工声明 Incident
对应你的产品MVP 至少应支持:
- Webhook / Events API 接入
- 手工创建 Incident
- 邮件或 IM 触发可以后置
### 5.2 统一事件模型
PagerDuty 在编排前会把事件转为统一字段模型,可理解为平台内部标准事件格式。这样后续规则就不需要适配每个监控源的异构字段。
建议你的平台在事件接入层完成:
- 原始事件落库
- 标准字段抽取
- 原始 payload 保留
- 常用字段标准化,如:
- 标题
- 来源
- 服务名
- 主机/实例
- 严重级别
- 环境
- 标签
- 去重键 `dedup_key`
### 5.3 告警与 Incident 的区分
PagerDuty 明确区分 `Alert``Incident`
- `Alert` 是事件处理后的告警记录。
- `Incident` 是需要人介入的处理单元。
这个设计非常关键,因为并不是所有事件都应该立刻通知人。很多事件只需要被记录、抑制、合并或等待进一步判断。
建议你的系统也采用二层模型:
- `Event -> Alert -> Incident`
这样后续做降噪、关联和 AIOps 会更自然。
## 6. 事件编排能力
事件编排是 PagerDuty 最值得优先复刻的部分之一。它本质上是“事件进入平台后,如何按规则被处理”的能力中心。
### 6.1 单入口统一接入
PagerDuty 的 Event Orchestration 支持将事件统一打到一个入口,再由平台按规则决定:
- 路由到哪个 `Service`
- 是否触发 Incident
- 是否仅保留为 suppressed alert
- 是否变更优先级、字段或升级策略
这个能力的价值在于:
- 上游系统不用知道最终具体通知谁
- 规则集中管理,不散落在各个服务里
- 后续可以逐步演化更复杂的自动化逻辑
### 6.2 编排层级
PagerDuty 的编排规则可分成三层理解:
- 全局编排规则:进入平台后的统一预处理
- 路由规则:决定流向哪个服务
- 服务级编排规则:到达服务后再做细分处理
你的产品复刻时建议采用类似分层:
1. `global_orchestration`
2. `routing_rules`
3. `service_orchestration`
### 6.3 路由规则能力
PagerDuty 的路由规则支持基于事件内容进行服务分发。需要复刻的关键点包括:
- 条件匹配路由
- 无条件默认路由
- catch-all 兜底规则
- 动态路由
- 从事件字段提取服务名或服务 ID
- 用正则提取目标值
- 时间条件路由
- 日期范围路由
- 频次条件路由
这意味着规则引擎至少需要支持以下条件类型:
- 字段等于/不等于
- 包含/不包含
- 正则匹配
- 数值比较
- 时间窗口
- 频率阈值
### 6.4 编排动作能力
PagerDuty 在规则命中后可以执行多个动作。这里是最核心的复刻清单。
#### 6.4.1 事件与 Incident 控制动作
- 触发 Incident
- 暂停通知一段时间后再触发
- 抑制告警,不创建 Incident
- 丢弃事件并停止处理
- 设置 Incident Priority
- 动态覆盖 Escalation Policy
- 向 Incident 自动写入说明 note
这是 PagerDuty 从“收事件”升级为“事件处理编排平台”的关键。
#### 6.4.2 字段富化与转换
PagerDuty 支持把原始事件字段转为统一字段,或覆盖已有字段。复刻时应支持:
- 字段映射
- 模板赋值
- 正则提取
- 自定义变量
- 构造 `dedup_key`
- 写入 `custom_details`
- 补充上下文信息
这类能力对后续 AIOps 非常重要,因为它直接决定事件数据质量。
#### 6.4.3 Incident 自定义字段填充
PagerDuty 允许把事件字段或变量写入 Incident Custom Fields。这个能力非常适合你的产品复刻因为它能把结构化上下文贯穿到整个响应链路。
建议支持:
- 静态值填充
- 动态字段映射
- 模板变量填充
- 多种字段类型
- 文本
- 单选
- 多选
- 标签
- 时间
- 整数/小数
- 布尔值
### 6.5 去重与聚合前置能力
PagerDuty 的编排可以直接设置 `dedup_key`。这意味着:
- 相同问题不会不断创建新的 Incident
- 后续事件可以进入同一个 Alert / Incident 生命周期
这部分建议作为 MVP 必须能力,因为没有去重,值班系统会非常吵。
### 6.6 Catch-all 与未命中处理
PagerDuty 对未命中规则的事件提供兜底行为:
- 不进入服务,也不创建 Incident
- 或统一路由到一个默认服务
这看似是小功能,实际上对线上运行非常重要。你的平台也需要支持:
- 明确的兜底规则
- 兜底规则审计
- 未命中事件可观测
### 6.7 自动化触发点
PagerDuty 的编排规则可以进一步触发:
- Webhook
- Automation Actions
- Incident Workflows
这说明其编排层不仅能“判定”,还能“驱动动作”。
你的产品可以先做两级:
- MVP规则命中后调用内部工作流/外部 Webhook
- 后续:对接 Runbook、审批流、自动修复动作
## 7. 值班、排班与升级能力
这是 PagerDuty 的第二根主线,也是最容易形成产品闭环的模块。
### 7.1 值班排班 `Schedule`
PagerDuty 的值班排班不是简单名单,而是一个完整的时间覆盖系统。核心能力包括:
- 创建排班表
- 设置时区
- 设置轮转方式
- 日轮转
- 周轮转
- 自定义轮转
- 设置交接时间
- 调整人员顺序
- 多层排班 `layer`
- 限定值班时间窗口
- 按天固定时间段
- 按周不同时间段
- 支持 follow-the-sun 场景
- 预览最终排班结果
建议你的产品在设计时把 `Schedule` 视为一等对象,而不是附属配置。
### 7.2 排班层 `Schedule Layer`
PagerDuty 支持一个排班中有多个 layer后创建的 layer 优先级更高。这个设计可以支持很多复杂场景:
- 平日/周末双层排班
- 全球时区覆盖
- 白班/夜班覆盖
- 节假日特殊层覆盖正常层
如果你想做企业级值班系统,`layer` 是很值得复刻的设计。
### 7.3 覆盖缺口与约束
PagerDuty 明确告诉用户:如果值班表限制了时间,就可能出现 coverage gap。若无人值班Incident 甚至不会被创建。
这给你的产品一个重要启示:
- 值班系统必须可计算“当前是否有人值班”
- 覆盖缺口必须可见
- 触发失败要给明确原因
建议必须支持:
- 当前 on-call 查询
- 未来值班预览
- 覆盖缺口检测
- 无值班人告警
### 7.4 升级策略 `Escalation Policy`
PagerDuty 的升级策略连接 `Service``Schedule``User`。核心功能包括:
- 多级升级规则
- 每级指定用户或值班表
- 每级超时时间 `escalation timeout`
- 未响应时自动升级到下一级
- 可重复整条升级策略多次
- 多人并行通知
- 支持 round robin
- 可关联到 team
这个模块建议你按“规则链”建模,不要只做“主值班人 + 备份值班人”两层固定结构。
### 7.5 升级行为细节
PagerDuty 在升级行为上有几个关键设计,非常值得复刻:
- 一旦有人 `acknowledge`,升级停止
- 如果当前层无人值班,则跳到下一层
- Incident 使用的是触发当时的升级策略快照
- 修改升级策略不会影响已经打开的 Incident
这几点会极大减少线上歧义。建议你的系统也保留:
- 升级快照
- 升级轨迹
- 每次通知记录
- 每次升级原因
### 7.6 通知方式与个人通知规则
PagerDuty 通知不只由升级策略决定,还受用户个人通知规则影响。支持渠道包括:
- Push
- Phone
- SMS
- Email
- Slack 等集成渠道
你的产品至少需要区分两层:
- 平台层决定“应该通知谁”
- 用户层决定“怎么通知他”
### 7.7 On-call Handoff
PagerDuty 提供值班交接通知,支持在上岗前最多 48 小时提醒。这类功能虽然不是 MVP 必需,但对真实值班体验非常重要。
建议纳入第二阶段:
- 值班前提醒
- 值班交接摘要
- 当前/下一班值班人可视化
## 8. Incident 协同响应能力
PagerDuty 并不止于“谁被通知”,它还覆盖了响应过程中的组织与协同。
### 8.1 Incident 生命周期
PagerDuty 的 Incident 具有明确状态:
- `triggered`
- `acknowledged`
- `resolved`
并支持:
- 手工声明 Incident
- API 触发 Incident
- 重新打开 Incident
- 取消 acknowledge
- redaction敏感信息擦除
建议你的产品至少实现:
- 新建
- 确认接手
- 解决
- 重开
- 状态时间线
### 8.2 Incident Timeline
PagerDuty 的 Timeline 是非常关键的基础能力,它记录:
- 状态变更
- 通知发送
- 升级动作
- 响应人加入/拒绝
- 备注
- 工作流执行结果
这不只是审计日志,也是复盘的数据源。
建议你的产品从第一版就做统一 Timeline而不是把日志散落在多个页面。
### 8.3 手工声明与覆盖分派
PagerDuty 支持手工创建 Incident 时:
- 指定受影响服务
- 指定优先级与紧急度
- 直接覆盖默认升级策略
- 指定用户或升级策略作为 assignee
- 添加额外响应人
- 添加会议桥接信息
这意味着手工声明不是“简单建单”,而是“一次完整的事件动员动作”。
### 8.4 添加响应人 `Add Responders`
PagerDuty 支持在 Incident 已经打开后继续加入响应人,包括:
- 单个用户
- 整个升级策略
- 手工加入
- 通过 Incident Workflow 自动加入
响应人可接受、拒绝或待处理,平台会记录状态。
建议你的系统复刻:
- 主负责人
- 额外响应人
- 响应邀请状态
- 升级策略作为 responder group
### 8.5 Incident Roles
PagerDuty 有专门的 Incident Roles而不是只靠备注描述角色。能力包括
- 预定义角色
- 自定义角色
- 给响应人分配角色
- 一个用户可承担多个角色
- 同一角色同一时刻只指向一个负责人
- Slack / Teams / Workflow 内都可操作
这是非常值得借鉴的企业级设计。
建议 MVP 支持至少两个默认角色:
- `Incident Commander`
- `Communications Lead`
### 8.6 Incident Tasks
PagerDuty 允许在响应过程中创建任务,既可以 ad-hoc也可以由工作流预定义。任务可包括
- 任务名称
- 描述
- 状态
- 指派人
这类能力有助于把“协同处理”从聊天工具中结构化出来。
建议在你的产品第二阶段加入:
- Incident 下挂任务列表
- 任务指派
- 任务状态流转
- 与工作流联动
### 8.7 会议与协作入口
PagerDuty 支持会议桥接信息,例如:
- Conference number
- Meeting URL
这说明 Incident 页不仅是状态页,也是协作入口页。
你的产品建议预留:
- 会议链接
- Chat channel 链接
- Runbook 链接
- Dashboard 链接
## 9. 干系人沟通与状态更新能力
PagerDuty 另一个很强的点,是把“故障处理”和“故障通报”明确分开。
### 9.1 订阅人 `Subscribers`
PagerDuty 支持给 Incident 增加订阅人:
- 用户
- 团队
- 业务服务订阅者
- 工作流自动订阅
而且订阅本身是 silent 的,不会立即打扰订阅者,只有后续状态更新才会通知。这是很成熟的设计。
### 9.2 状态更新 `Status Updates`
PagerDuty 支持响应人主动发布状态更新,典型内容包括:
- 当前影响面
- 当前处理进展
- 预计恢复时间
- 下一次更新时间
更新可通过:
- Web
- Mobile
- API
- Incident Workflow
### 9.3 多渠道发布
PagerDuty 的状态更新可发到:
- Push
- Email
- SMS
- Internal Status Page
这意味着平台要区分:
- 响应者通知
- 干系人状态通知
这两个不是一回事。
### 9.4 模板化沟通
PagerDuty 提供 `Status Update Templates`,支持:
- 模板名称和描述
- 标准消息模板
- Email 标题和正文模板
- 变量字段引用
- Liquid 模板语言
- 条件渲染
- 自定义字段带入
这类能力非常有价值,因为很多企业故障通报的难点不在“能发消息”,而在“内容是否规范一致”。
建议你的产品至少支持:
- 状态更新模板
- 变量占位符
- 富文本邮件模板可以后置
## 10. 复盘与事件学习能力
PagerDuty 通过 Jeli 把复盘做成了独立能力域,而不是只留一段文字备注。
### 10.1 复盘入口
PagerDuty 支持从已解决 Incident 创建 Post-Incident Review。也支持传统 Postmortem 报告模式。
这意味着:
- 复盘对象应与 Incident 绑定
- 一个 Incident 可以触发一个正式复盘流程
### 10.2 复盘状态流转
Jeli 提供明确的复盘阶段:
1. `Unassigned`
2. `Assigned`
3. `In Progress`
4. `In Review`
5. `Completed`
这个设计非常适合你复刻,因为它让“复盘有没有做”变成可管理对象,而不是靠口头推动。
### 10.3 复盘报告结构
PagerDuty 的 Post-Incident Review Report 不是单一表单,而是一组结构化标签页,核心包括:
- Overview
- Summary
- Key Roles
- Imported Data Sources
- Tags
- Related Reviews
- Narrative
- People
- Takeaways
- Action Items
- Attached Resources
- Export Report
对于你的产品,这说明复盘需要覆盖三类内容:
- 事实数据
- 叙事分析
- 改进行动
### 10.4 Narrative Builder
这是 Jeli 很有特色的能力。它不是简单时间线,而是“基于证据构建事故叙事”。核心点包括:
- 导入 Slack 等原始数据
- 通过 Event Marker 组织叙事
- Marker 类型包括:
- Detection
- Diagnosis
- Repair
- Key Moment
- 每个 Marker 可包含:
- 摘要
- Supporting Evidence
- Supplemental Evidence
- Notes
- 时间点或时间范围
- 支持按参与者、来源、标签检索证据
- 支持复盘会议时直接展示和讲解
这个能力对于 AIOps 非常重要,因为它让“故障经过”变成结构化知识,而不是散落在聊天记录里。
### 10.5 Key Roles 与参与人分析
Jeli 在复盘里单独强调:
- 关键角色是谁
- 谁在什么阶段参与了 Incident
- 谁承担了调查者/指挥者/沟通者职责
这对组织学习和流程优化很有价值。
### 10.6 Takeaways 与 Action Items
PagerDuty 把复盘结论分成两个层面:
- `Takeaways`:经验、发现、主题
- `Action Items`:后续必须落实的动作
Action Items 既可以是:
- 纯文本 quick items
- 也可以对接 Jira 创建或绑定工单
这一点非常值得直接复刻。很多平台停留在“写复盘文档”,但没有把行动项拉通到工程系统。
### 10.7 复盘附件与导出
PagerDuty 支持:
- 上传 PDF、TXT、VTT 等附件
- 导出 PDF 报告
- 自定义导出章节顺序
这类能力不是 MVP 必需,但对企业交付和审计非常重要。
## 11. 分析报表与管理洞察
PagerDuty 提供 `Insights`,主要面向管理和运营改进,包含:
- Incident Activity
- Service Performance
- Responder
- Team
- Escalation Policy
- Business Impact
这意味着系统不仅服务一线值班人,还服务管理者。
建议你的产品在基础版本至少统计:
- Incident 数量
- MTTA / MTTR
- 升级次数
- 值班命中率
- 服务级故障分布
- 响应人工作量
后续可以扩展到:
- 团队维度表现
- 升级策略合理性分析
- 业务服务影响分析
## 12. 按复刻优先级给出的产品范围建议
下面是更适合你当前阶段的拆分方式。
### 12.1 第一阶段:先复刻 PagerDuty 的基础闭环
这是最值得先做的范围。
#### 必须有
- 事件接入 API
- 统一事件模型
- `Event -> Alert -> Incident` 基础链路
- 路由规则
- 去重 `dedup_key`
- 抑制/暂停/默认兜底策略
- `Service`
- `Schedule`
- `EscalationPolicy`
- 当前 on-call 计算
- 多渠道通知基础能力
- Incident 状态流转
- Incident Timeline
- 手工声明 Incident
- 添加响应人
- 订阅人与状态更新
- 基础复盘记录
- 基础统计报表
#### 第一阶段最好有
- 自定义字段
- 模板化状态更新
- 角色分配
- 工作流触发点
- 复盘行动项
### 12.2 第二阶段:补齐 PagerDuty 的企业级体验
- 多层排班 `layer`
- 覆盖缺口检测
- round robin
- handoff 通知
- Incident Roles 全量能力
- Incident Tasks
- Internal Status Page
- Postmortem 模板
- 导出 PDF 报告
- Jira / ITSM 双向集成
### 12.3 第三阶段:进入 AIOps 增强
当基础 Incident Management 稳定后,再叠加 AIOps 更合理。建议的 AIOps 增强点包括:
- 智能告警聚合
- 相似 Incident 检索
- Probable Origin / 可能根因推荐
- 关联近期变更
- 告警降噪与异常检测
- 自动填充 Incident 摘要和状态更新
- 自动生成复盘初稿
- 自动提取行动项建议
- 自动推荐 responder / escalation policy
- 自动运行诊断工作流
换句话说AIOps 应建立在以下基础能力之上:
- 结构化事件
- 结构化 Incident
- 可靠时间线
- 历史复盘数据
- 服务拓扑与变更数据
如果没有这些底座AIOps 只会变成“会说话的告警页面”。
## 13. 建议你优先复刻的功能清单
如果你现在要做一个“先像 PagerDuty再逐步进化到 AIOps”的产品我建议优先级如下
### P0
- 事件接入
- 编排路由
- 去重与抑制
- 服务管理
- 值班排班
- 升级策略
- 多渠道通知
- Incident 生命周期
- Timeline
### P1
- 添加响应人
- Incident 角色
- 干系人订阅
- 状态更新
- 模板化通报
- 基础复盘
- 行动项跟踪
### P2
- 复杂排班 layer
- 任务系统
- 复盘叙事构建
- 复盘阶段流转
- 报表洞察
- Slack / Teams / Jira 深度联动
### P3
- 智能聚合
- 智能根因建议
- 智能状态更新生成
- 智能复盘初稿
- 自动化诊断与修复编排
## 14. 对 AIOps 设计的直接启发
PagerDuty 给你的最大启发,不是某个单点功能,而是产品层次顺序:
1. 先把 Incident Management 做扎实。
2. 再把 Automation 接上。
3. 最后再把 AIOps 做成增强层,而不是替代底层模型。
因此你的 AIOps 平台设计更合理的路径应是:
- 第一层:事件接入与标准化
- 第二层:编排、值班、升级、协同
- 第三层:复盘、知识沉淀、行动项闭环
- 第四层AIOps 智能增强
这比一上来就强调“AI Agent 自动处理故障”更容易真正落地。
## 15. 结论
如果把 PagerDuty 的核心功能提炼成一句话,它不是“告警平台”,而是“围绕 Incident 生命周期的编排与协作平台”。
对于你的产品路线,最合理的做法是:
1. 先复刻它的基础闭环事件编排、值班升级、Incident 协同、复盘沉淀。
2. 再在这些结构化数据之上叠加 AIOps聚合、关联、根因、推荐、自动化。
如果继续往下做,我建议下一份文档直接接这个主题,写成:
- `PagerDuty_MVP_Product_Requirements.md`
里面把本文件再进一步收敛成:
- MVP 必做功能
- 页面清单
- 核心对象模型
- 后端服务拆分建议
- AIOps 二期能力边界
## 16. 参考来源
以下内容主要参考 PagerDuty 官方公开资料:
- Event Orchestration
- Incidents
- Schedule Basics
- Escalation Policy Basics
- Add Responders
- Communicate with Stakeholders
- Status Update Templates
- Incident Roles
- Incident Tasks
- Jeli Post-Incident Reviews and Postmortems
- Post-Incident Review Report
- Post-Incident Review Stages
- Collect Action Items
- Narrative Builder
- Insights