在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 LibreNMS,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 LibreNMS,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 LibreNMS 中配置
以下步骤需要 LibreNMS 25.7.0 或更高版本:请求体模板用
json_encode 过滤器转义文本字段,这个过滤器从 25.7.0 开始提供。
1
创建告警通道
进入 Alerts → Alert Transports,点击 Create alert transport,按下表填写:模板中带
请求体模板:
|json_encode 的字段不要再加引号:过滤器会输出带引号并已转义的 JSON 字符串,规则名称或告警正文中的引号、换行不会破坏 JSON。其余字段保持默认,点击 Save 保存。2
将通道关联到告警规则
LibreNMS 26.4.0 起,告警规则通过 Operation 指定通知通道;更早的版本在规则中直接选择 Transports。按您的版本操作:LibreNMS 26.4.0 及以上
- 进入 Alerts → Operations,新建一个 Operation,或编辑规则已使用的 Operation
- 在一个分段(segment)中加入上一步创建的通道;新建时可设置 Steps from 为
1、Steps to 为1、Start (s) 为0,规则匹配后立即发送一次 - 进入 Alerts → Alert Rules,编辑需要推送的规则,在 Operation 中选择该 Operation
3
验证生命周期
在 Alerts → Alert Transports 列表中点击该通道右侧的测试按钮(黄色对勾图标,提示为 Test transport),确认 LibreNMS 提示测试成功。测试通知使用 LibreNMS 固定的测试数据(
alert_id 为 000),Flashduty 返回成功,不会生成告警。然后让一条规则真正触发(例如让一台被监控设备不可达,使 Devices up/down 规则告警),确认 Flashduty 收到活动告警;恢复设备后,确认原告警关闭。LibreNMS 在每次轮询后检查告警规则,告警和恢复通常在一个轮询周期(默认 5 分钟)内送达。Alert Key
Flashduty 使用
alert_id 作为 Alert Key。alert_id 是 LibreNMS alerts 表中的行 ID,每个「设备 + 告警规则」只有一行,触发、变化和恢复通知都携带同一个值;LibreNMS 自带的 PagerDuty 通道也用它作为去重键。因此同一台设备上同一条规则的通知落在同一条告警上,规则恢复后再次触发会打开一条新告警。
告警等级、规则名称、主机名、告警正文的变化都不会改变 Alert Key。alert_id 只在一个 LibreNMS 实例内唯一:多个 LibreNMS 实例请分别使用不同的 Flashduty 集成。
请求缺少 alert_id 或 state 时,Flashduty 会拒绝该请求。
告警生命周期
Flashduty 按
state 字段处理通知:
使用 Operation 的规则(LibreNMS 26.4.0 及以上)只发送触发、确认和恢复通知,不发送
state 为 3、4、5 的通知;这三种通知只在规则直接选择 Transports 时发送(25.7.0 至 26.3.x)。
规则开启 Acknowledgement alerts 后,LibreNMS 会在告警被确认时发送 state 为 2 的通知。确认不会打开或关闭 Flashduty 告警,被忽略的通知返回成功。
告警等级
告警等级取自告警规则的 Severity:
恢复通知携带同一条规则的 Severity,恢复事件保留该等级。
告警内容
- 标题:
<规则名称> on <主机名>;规则名称为空时用LibreNMS rule <rule_id>代替 - 描述:LibreNMS 告警模板渲染出的正文
msg,默认模板包含标题、等级、时间和故障对象 - 标签:
check(规则名称)、resource和host(主机名)、alert_id、rule_id、device_id、sys_name、os、location、severity(规则原始等级)、state(alert、worse、better、changed或recovered)
排查问题
- 测试时 LibreNMS 报
Transport delivery failed with 401,返回内容含integration_key is required:integration_key要填在 Options 中,不能写在 API URL 里 - 测试时 LibreNMS 报
Transport delivery failed with 400:如果返回内容中出现原样的{{ $name|json_encode }},说明 LibreNMS 低于 25.7.0,不认识json_encode过滤器,请升级;否则检查模板中带|json_encode的字段是否额外加了引号,以及 Send as form 是否未勾选 - 告警没有发出:26.4.0 及以上确认规则选择了包含该通道的 Operation,更早版本确认规则的 Transports 包含该通道;在设备的 Alerts 页或 Event Log 中查看发送结果
- 告警没有恢复:确认规则的 Recovery alerts 已开启