在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 Pandora FMS,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 Pandora FMS,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 Pandora FMS 中配置
Pandora FMS 的告警动作在 Pandora FMS 服务器上执行命令。下面的配置新建一个用
curl 推送的告警命令,再新建一个使用该命令的动作,最后把动作加到模块告警上。
执行告警的 Pandora FMS 服务器需要安装
curl,并且能够通过 HTTPS 访问推送地址中的域名。1
新建告警命令
- 以管理员身份登录 Pandora FMS 控制台,进入 Management → Alerts → Commands,点击 Create
- Name 填写
Flashduty - Command 填写下方命令,保持为一行,不要修改字段名:
- 按下表填写字段说明和可选值:
- 点击 Create 保存
curl --data-urlencode 再对值做 URL 编码,所以代理名、模块描述中的空格、引号和中文都能原样到达 Flashduty。2
新建告警动作
- 进入 Management → Alerts → Actions,点击 Create
- Name 填写
Flashduty,Group 选择需要使用该动作的组(所有组选 All),Command 选择上一步的Flashduty - 按下表填写字段,Triggering 和 Recovery 两列都要填:
- 点击 Create 保存
3
确认告警模板开启了恢复
进入 Management → Alerts → Templates,打开要使用的模板,在第 3 步 Advanced fields 中确认 Alert recovery 为启用。内置的 Critical condition 和 Warning condition 模板默认已启用。Alert recovery 关闭时,模块恢复后 Pandora FMS 不会执行动作,Flashduty 中的告警不会自动关闭。
4
把动作加到模块告警
- 进入 Management → Alerts → List of Alerts,点击 Create 新建一条模块告警,或在列表中找到已有的模块告警
- 选择 Agent、Module 和 Template,在 Actions 中选择
Flashduty - 点击 Add alert
Flashduty 动作。已有模块告警只需添加 Flashduty 动作,原有的邮件等动作不受影响。5
验证生命周期
让一个已配置告警的模块进入告警条件(例如调低 CPU 模块的 Critical 阈值),确认 Flashduty 收到活动告警;恢复阈值后等待下一次采集,确认原告警关闭。
推送内容
命令以
application/x-www-form-urlencoded 表单格式 POST 以下字段:
告警标题为
<模板名称>: <代理> / <模块>;缺少部分字段时使用其余字段,全部为空时使用 Pandora FMS alert <id_alert>。
Alert Key
Flashduty 使用
id_alert(Pandora FMS 宏 _id_alert_)作为 Alert Key。Pandora FMS 文档对该宏的说明是 “Alert identifier, useful for correlating the alert in third-party tools”:它是模板分配到某个模块后的模块告警 ID,同一条模块告警的触发、重复触发和恢复携带相同的 ID,因此会落在同一条 Flashduty 告警上。同一个模板分配到两个模块时是两条模块告警,ID 不同,会生成不同的 Flashduty 告警。修改模板名称、优先级、代理别名或数据不会改变 Alert Key。
模块告警 ID 只在一套 Pandora FMS 内唯一。多套 Pandora FMS(包括 Metaconsole 下的多个节点)请分别使用不同的 Flashduty 集成,避免不同实例中 ID 相同的告警合并到同一条告警。
只有模块告警带有 _id_alert_。事件告警、日志告警和关联告警没有模块告警 ID,Flashduty 会以参数错误拒绝,请不要把 Flashduty 动作加到这类告警上。
状态和告警等级
event 决定告警触发还是恢复,alert_priority(告警模板的 Priority)决定告警等级:
event 为 alert_recovered 时关闭告警,告警等级仍取模板优先级。event 为空或为其他值的请求会被拒绝,避免把无法判断状态的请求写入错误的告警生命周期。
常见问题
为什么要在动作里填写 Event?
为什么要在动作里填写 Event?
Pandora FMS 在告警触发和恢复时执行同一个动作,没有宏能说明本次执行是触发还是恢复,只有动作字段可以按 Triggering 和 Recovery 分别取值。因此由 Field 2 的
alert_fired 和 alert_recovered 告诉 Flashduty 本次执行是触发还是恢复。手动强制执行(Force)告警会创建告警吗?
手动强制执行(Force)告警会创建告警吗?
对尚未触发的模块告警强制执行时,
alert_times_fired 为 0。Flashduty 把这类请求识别为测试,直接返回成功,不会创建告警。对已经触发的告警强制执行时,请求会合并到该告警,不会新建告警。告警重复触发会产生多条告警吗?
告警重复触发会产生多条告警吗?
不会。同一条模块告警在恢复前的重复触发携带相同的
id_alert,会合并到同一条 Flashduty 告警。重复触发的频率由模板的 Max number of alerts 和动作的 Threshold 控制。告警在 Pandora FMS 中已恢复,Flashduty 中没有关闭?
告警在 Pandora FMS 中已恢复,Flashduty 中没有关闭?
依次确认:告警模板启用了 Alert recovery;动作 Field 2 的 Recovery 列是
alert_recovered;模块告警没有处于 Standby 状态(Standby 的告警不执行任何动作)。排查问题
- Pandora FMS 没有推送:在 Pandora FMS 服务器上执行
curl -sS <推送地址>确认网络可达;确认动作的 Group 覆盖了代理所在组 - Flashduty 返回参数错误:确认命令完整粘贴、保持为一行;确认动作 Field 2 两列分别为
alert_fired和alert_recovered;确认动作只加在模块告警上 - 告警没有恢复:见上方常见问题 “告警在 Pandora FMS 中已恢复,Flashduty 中没有关闭?”