在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 Observium,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 Observium,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 Observium 中配置
Observium 社区版(Community Edition)即自带 Webhook JSON 通道,无需订阅版。以下界面名称以 Observium CE 26.1 为准。
1
创建联系人
以管理员身份登录 Observium,在顶部菜单 Observium(地球图标)中选择 Contacts,点击右上角 Add Contact,按下表填写:
点击 Add Contact 保存。JSON passed to Webhook 的默认模板如下。Flashduty 读取其中的
ALERT_STATE、ALERT_ID、ALERT_SEVERITY、ALERT_MESSAGE、ALERT_URL、CONDITIONS、METRICS、DURATION、ENTITY_* 和 DEVICE_* 字段;如果您修改过模板,请至少保留 ALERT_STATE 和 ALERT_ID,并保持每个值都带引号:2
关联告警检查器
- 在 Contacts 列表中点击刚创建的联系人,进入联系人详情
- 在 Associated Alert Checkers 区域的下拉框中选择需要推送的告警检查器,点击 Associate;每次关联一个,重复操作关联多个
- 如需推送 Syslog 告警,在 Associated Syslog Rules 区域同样选择规则并点击 Associate
3
验证生命周期
Observium 社区版的网页界面没有联系人测试按钮,请在 Observium 安装目录(通常为 测试通知使用 Observium 自带的示例数据,其中的链接都指向
/opt/observium)中用命令行发送测试通知,<contact_id> 为 Contacts 列表中该联系人的 ID:observium.test。Flashduty 返回成功,不会生成告警。然后让一个检查器真正触发(例如让一台被监控设备不可达,使设备 up/down 检查器告警),确认 Flashduty 收到活动告警;恢复设备后,确认原告警关闭。Observium 的 alerter 在每次轮询后检查告警并发送通知,告警和恢复通常在一个轮询周期(默认 5 分钟)内送达;检查器设置了 Alert Delay 时,告警会再推迟相应的检查次数。Alert Key
Flashduty 使用
ALERT_ID 作为检查器告警的 Alert Key。ALERT_ID 是 Observium alert_table 表中的行 ID,每个「告警检查器 + 监控对象」只有一行,告警、重复提醒和恢复通知都携带同一个值。因此同一对象上同一检查器的通知落在同一条告警上,恢复后再次失败会打开一条新告警。
告警等级、检查器消息、主机名、指标值和时间的变化都不会改变 Alert Key。ALERT_ID 只在一个 Observium 实例内唯一:多个 Observium 实例请分别使用不同的 Flashduty 集成。
Syslog 告警的 ALERT_ID 是 Syslog 规则的 ID,且 Syslog 告警没有恢复通知,因此每次命中都生成一条新告警,不会自动恢复。建议在协作空间开启超时自动关闭,超时计时起点选 故障触发,超时时长建议 1 小时:每次命中只是一条日志事件,问题仍在时下一条匹配的日志会再生成新告警。也可以在 Flashduty 中手动关闭。
请求缺少 ALERT_STATE 或 ALERT_ID,或 ALERT_STATE 不是下表中的值时,Flashduty 会拒绝该请求。
告警生命周期
Flashduty 按
ALERT_STATE 字段处理通知:
ALERT_STATE 是 Observium 的固定状态名,不受 $config['alerts']['status_name'] 自定义影响;自定义名称体现在 ALERT_STATE_NAME 中,Flashduty 不读取它。
告警等级
告警等级取自
ALERT_SEVERITY:
检查器告警的等级是检查器的 Severity(
Critical 或 Warning);Syslog 告警的等级是该条日志的 Syslog 优先级。恢复通知携带同一个检查器的等级,恢复事件保留该等级。
告警内容
- 标题:
<检查器消息> on <对象名称>;对象不是设备本身(例如端口、传感器)时,末尾追加(<主机名>)。检查器消息为空时用Observium alert <ALERT_ID>代替 - 描述:
CONDITIONS(未满足的条件)、METRICS(当前指标值)和DURATION(持续时间),各占一行 - 标签:
check(检查器消息)、resource(对象名称)、host(主机名)、alert_id、entity_type、entity_id、device_id、sys_name、os、hardware、device_type、location、severity(原始等级)、state(ALERT_STATE原值)、alert_url(Observium 中的告警页面)
%TAG% 占位符(例如 Syslog 通知中的 ENTITY_*),不会写入标签。
排查问题
- Observium 把通知记为发送失败、Flashduty 收到重复事件:联系人的 Transport 选成了 Webhook,请改为 Webhook JSON
- Flashduty 返回 400,提示
ALERT_STATE is required或ALERT_ID is required:联系人的 JSON 模板缺少对应字段,恢复为默认模板 - Flashduty 返回 400,错误信息是 JSON 解析错误:检查修改过的模板,每个
%TAG%都要写在引号中 - 告警没有发出:确认联系人已关联该检查器,且联系人未被禁用;在 Observium 安装目录运行
./alerter.php -h all -d查看通知发送结果(不带-h会报Invalid arguments!) - 告警没有恢复:确认检查器的 Send recovery notification 已开启
- 告警中的 Observium 链接不可访问:在
config.php中设置$config['web_url']为 Observium 的外部访问地址,命令行发送通知时用它生成链接