在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 PowerJob,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 PowerJob,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 PowerJob 中配置
PowerJob 的报警对象是用户:先在用户上设置 WebHook 地址,再在任务或工作流上选择要通知的用户。本集成基于 PowerJob 5.1.7 验证。
1
为用户设置 WebHook 地址
- 使用有权限的账号登录 PowerJob 控制台,进入 个人中心,打开 个人信息 标签页
- 在 WebHook 一栏填入 Flashduty 集成的完整推送地址(含
integration_key),保存
http:// 或 https:// 前缀时自动补上 http://,请直接填写带 https:// 的完整地址。PowerJob 服务端需要能访问公网上的 Flashduty。2
在任务或工作流上选择报警通知人员
- 点击 新建任务 创建任务,或编辑要监控的任务,在 报警配置 一栏的 选择报警通知人员 中选中上一步的用户,保存
- 对要监控的工作流做同样的设置
3
验证
PowerJob 没有“发送测试通知”按钮。让一个任务失败,例如使用内置的
StandaloneProcessorDemo 处理器并把任务参数设为 failed,运行后确认 Flashduty 出现一条 Critical 告警,标题为 PowerJob job failed: <任务名称>。告警不会自动恢复
PowerJob 不发送恢复通知,也不在任务后来执行成功时报警。在接收该集成的协作空间中开启 超时自动关闭,建议 12 小时,并按团队处理失败任务的时效调整。 每一次失败的执行都是一条独立告警。高频调度的任务(例如每分钟一次)连续失败时,会产生大量告警,可以配合 Flashduty 的告警聚合降噪。
任务失败和工作流失败
本集成按请求内容区分两种报警:
- 任务失败:包含
jobId和instanceId。标题为PowerJob job failed: <任务名称>,缺少任务名称时用job <jobId> - 工作流失败:包含
workflowId和wfInstanceId。PowerJob 5.1.7 的工作流报警不带工作流名称,标题为PowerJob workflow failed: workflow <workflowId>,请在 PowerJob 控制台用该 ID 找到对应的工作流
result(超过 1000 字节会被截断)。任务参数、实例参数和处理器信息(例如 Shell 脚本内容)可能包含敏感信息,Flashduty 不读取这些字段。
Alert Key
每次执行都有新的实例 ID,所以每次失败都是新告警,同一次执行不会重复告警。任务名称、执行结果、时间的变化不会改变 Alert Key。缺少上述字段的请求会被拒绝。
实例 ID 是超过 2^53 的长整数,Flashduty 按原文保留每一位数字。
状态和告警等级
PowerJob 的报警没有等级字段,且只在执行失败时发送,所以所有告警都是触发状态、Critical 等级。
标签
排查问题
- Flashduty 没有收到事件:确认执行失败的任务或工作流选了报警通知人员,且该用户填写了 WebHook;确认 PowerJob 服务端能访问 Flashduty,推送地址完整且包含
integration_key。PowerJob 发送失败时只在服务端日志中记录一条[WebHookAlarmService] invoke webhook ... failed,不会重试 - Flashduty 返回参数错误:请求缺少 Alert Key 一节所列的字段,或不是 PowerJob 的 JSON 报警
- 告警一直不关闭:这是预期行为,请开启协作空间的超时自动关闭
- 看不到工作流名称:见上文,PowerJob 5.1.7 的工作流报警不带名称