PagerDuty 集成与接入指南
PagerDuty SaaS 平台的集成与接入总览:账号与基础对象(service/incident/集成/用户)概念、Events API v2 事件接入(routing key)、REST API Key 管理,含官方端点实测响应
PagerDuty 集成与接入指南
目标:梳理 PagerDuty(SaaS 云平台,无自有服务可自托管)的集成接入体系——核心对象概念、Events API v2 事件接入、REST API v2 与 API Key 管理,并给出官方端点的实测响应。涉及真实账号的步骤标注 ⚠️ 前置。
一、环境信息
| 信息项 | 值 |
|---|---|
| PagerDuty 形态 | SaaS 云平台(无需安装/部署,官方域名 api.pagerduty.com / events.pagerduty.com) |
| Events API | v2(https://events.pagerduty.com/v2/enqueue) |
| REST API | v2(https://api.pagerduty.com) |
| 实测方式 | 官方端点 curl 契约验证 + 本地模拟接收端复现(无真实账号部分标注 ⚠️ 前置) |
二、PagerDuty 是什么
PagerDuty 是托管式事件响应(Incident Response)SaaS:接收监控系统(Prometheus/Grafana/Zabbix/自有脚本)推送的告警事件,按既定策略(调度表、升级路径、值守轮转)触达值守人员,并提供事件跟踪、复盘与审计。
- 无自有服务可部署:所有能力在云上,客户端仅通过 Events API(推事件) 与 REST API(管理) 交互。
- 事件流:监控告警 → Events API v2(带 routing key)→ 触发/解析 Incident → 调度通知 → 值守确认/关闭。
三、核心对象概念
| 对象 | 说明 | 与监控侧对应 |
|---|---|---|
| Service(服务) | 被监控的逻辑单元(如"线上支付"),事件都归属到 Service | 对应一组监控目标/一个业务域 |
| Integration(集成) | Service 下的一种事件接入方式,Events API v2 集成提供一个 32 位 routing key | 对应 webhook/推送目标地址 |
| Incident(事件/事故) | 由 trigger 事件创建、resolve 事件关闭;可包含 assignee、urgency、escalation | 对应"活动中的告警" |
| User / Team(用户/团队) | 值守人员与组织分组 | 对应值班人员名单 |
| Escalation Policy(升级策略) | 无人响应时按层级/时间升级通知 | 对应告警升级规则 |
| Schedule(调度表) | 值守轮转排班 | 对应值班表 |
四、注册与基础准备(⚠️ 前置:需要真实 PagerDuty 账号)
⚠️ 以下步骤需在 PagerDuty 官方控制台完成,本环境无真实账号,步骤按官方流程给出,最终落点在获取两类凭据:routing key(推事件) 与 REST API Token(管资源)。
- 访问 https://www.pagerduty.com/ 注册账号并完成邮箱验证、组织(Account)创建。
- 左侧 People → Users:添加值守用户,记录其邮箱(REST API 管理用户时用)。
- Teams:创建团队(如
ops-team)并归入用户。 - Incidents → Escalation Policies:创建升级策略(如 L1 立即通知、15 分钟未响应升 L2)。
- Services → New Service:创建 Service(如
production-web),Integration 类型选择 Events API v2,保存后获得 Integration Key(routing key),形如 32 位十六进制字符串。
💡 说明:本指南后续所有演示使用假 routing key(
11111111111111111111111111111111),真实接入时替换为控制台获取的值;事件推送的目标 URL 固定为https://events.pagerduty.com/v2/enqueue。
五、Events API v2:事件接入(推)
5.1 端点与请求格式
POST https://events.pagerduty.com/v2/enqueue
Content-Type: application/json
{
"routing_key": "11111111111111111111111111111111",
"event_action": "trigger",
"dedup_key": "disk-full-db-01",
"payload": {
"summary": "磁盘使用率 90%",
"source": "db-01",
"severity": "critical",
"timestamp": "2026-10-08T21:00:00.000Z",
"custom_details": {"instance": "db-01", "mount": "/data"}
},
"client": "ops-script",
"client_url": "https://ops.example.com"
}
| 字段 | 必填 | 说明 |
|---|---|---|
routing_key | 是 | Events API v2 集成的密钥 |
event_action | 是 | trigger(触发)/ acknowledge(确认)/ resolve(解决) |
dedup_key | 否 | 去重键,同键 trigger/resolve 关联为同一 incident |
payload.summary | 是 | 事件摘要(≤1024 字符) |
payload.severity | 是 | critical/error/warning/info |
payload.source | 是 | 事件来源标识 |
5.2 curl 实测(真实官方端点)
curl -s -X POST "https://events.pagerduty.com/v2/enqueue" \
-H "Content-Type: application/json" \
-d '{"routing_key":"fake","event_action":"trigger","payload":{"summary":"test","source":"test","severity":"info"}}'
实测回显(无效 key 的官方契约响应):
Invalid routing key
💡 说明:返回
Invalid routing key证明端点与协议正确,仅凭据无效;合法 key 会返回{"status":"success","dedup_key":"...","message":"Event processed"}(含 HTTP 202)。可用本地 webhook 模拟端点复现完整请求体(见下节)。
5.3 本地可复现演示(不依赖真实账号)
在服务器起一个回显端点,把 Alertmanager 的 PagerDuty receiver 指向它,即可看到 PagerDuty 将收到的完整事件体。实测(Alertmanager 0.34.1 触发事件):
{
"routing_key": "${PD_ROUTING_KEY}",
"dedup_key": "3821961fee9ba99325d36ab961f8d3d09611051672e0d48ae0196730938bfd49",
"event_action": "trigger",
"payload": {
"summary": "[FIRING:1] DatabaseDown (pg-01 critical)",
"source": "Alertmanager",
"severity": "critical",
"custom_details": {"firing": [...], "num_firing": 1, "num_resolved": 0, "resolved": []}
},
"client": "Alertmanager",
"client_url": "http://alertmanager-srv:9095/#/alerts?receiver=pd"
}
💡 说明:
dedup_key由 Alertmanager 按告警指纹生成,同告警恢复(resolve)时复用同一 key,PagerDuty 据此关联触发/解决。
六、REST API v2:平台管理(管)
- 基址
https://api.pagerduty.com,鉴权头Authorization: Token token=<API_TOKEN>,媒体类型Accept: application/vnd.pagerduty+json;version=2。 - 典型资源:
/users、/teams、/services、/incidents、/escalation_policies、/schedules。
实测契约(无效 Token):
curl -s -o /dev/null -w "HTTP %{http_code}\n" "https://api.pagerduty.com/users" \
-H "Authorization: Token token=fake_token" \
-H "Accept: application/vnd.pagerduty+json;version=2"
实测回显:
HTTP 401
💡 说明:401 即端点可达、鉴权失败;携带合法 Token 时返回 200 与资源列表(详见《PagerDuty REST API 与运维指南》)。
七、API Key 管理
| 凭据类型 | 用途 | 获取位置 | 权限范围 |
|---|---|---|---|
| Events API v2 routing key | 推送事件(trigger/resolve) | Service → Integrations → Events API v2 | 仅该 Service 事件 |
| REST API Token | 管理用户/服务/事件/策略 | 右上角 用户头像 → User Settings → API Access Keys | 账号级(可限只读) |
| OAuth 客户端 | 第三方应用授权 | Developer Mode → OAuth | 按 scopes |
⚠️ 注意:routing key 与 Token 属系统级密钥,正文一律以
${VAR}占位/假值演示,生产通过环境变量或密钥管理注入,取值方法与注入写法如下:# routing key:控制台 Service → Integrations → Events API v2 复制 32 位值 export PD_ROUTING_KEY=$(cat /etc/pd/routing_key) # REST API Token:User Settings → API Access Keys 生成 export PD_API_TOKEN=$(cat /etc/pd/token)泄漏后应立即在控制台轮换对应密钥。
八、常见问题
Q1:推送返回 Invalid routing key?
key 错误或集成类型不是 Events API v2(旧 v1 集成用 service_key 且 URL 不同)。核对 Service 的 Integration 类型与 key。
Q2:事件已返回 success 但没收到通知?
确认 Service 已配置 Escalation Policy,且 policy 内用户有可用联系方式(邮箱/电话/App)并处于 On-Call。
Q3:trigger/resolve 未关联为同一 incident?
两事件必须用相同 dedup_key(或相同 payload 指纹);Alertmanager 会自动按告警指纹生成一致 key。
Q4:需要把事件转发到本地做联调?
把监控端 webhook 指向本地回显端点即可复现请求体(本指南 五、5.3),无需真实账号即可验证格式。
九、参考链接
- Events API v2:https://developer.pagerduty.com/docs/events-api-v2/overview/
- REST API v2:https://developer.pagerduty.com/api-reference/
- 与 Prometheus 对接见《PagerDuty 与 Prometheus-Alertmanager 集成指南》,与 Grafana 对接见《PagerDuty 与 Grafana 告警集成指南》