Skip to main content
Observium 通过 Webhook JSON 类型的联系人(Contact)推送告警:告警检查器(Alert Checker)触发、重复提醒或恢复时,Observium 按联系人中的 JSON 模板向 Flashduty 发送一条 JSON。每个「告警检查器 + 监控对象」对应一条 Flashduty 告警:检查失败时打开,检查恢复时自动关闭。Syslog 告警规则的每次命中各生成一条独立告警。

在 Flashduty On-call


您可通过以下两种方式获取集成推送地址,任选其一即可。

使用专属集成

  1. 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
  2. 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
  3. 选择 Observium,点击 保存
  4. 打开生成的集成卡片,复制 推送地址

使用共享集成

  1. 进入 Flashduty 控制台,选择 集成中心 → 告警事件
  2. 选择 Observium,填写集成名称
  3. 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
  4. 点击 保存,复制生成的 推送地址

在 Observium 中配置


Observium 社区版(Community Edition)即自带 Webhook JSON 通道,无需订阅版。以下界面名称以 Observium CE 26.1 为准。
1

创建联系人

以管理员身份登录 Observium,在顶部菜单 Observium(地球图标)中选择 Contacts,点击右上角 Add Contact,按下表填写:点击 Add Contact 保存。
Transport 请选择 Webhook JSON,不要选择 Webhook。Webhook 通道要求接收方返回 {"status": "successful"},Flashduty 的响应不含该字段,Observium 会把每次推送记为失败并在通知有效期(5 分钟)内重试,Flashduty 会收到重复事件。
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

关联告警检查器

  1. 在 Contacts 列表中点击刚创建的联系人,进入联系人详情
  2. 在 Associated Alert Checkers 区域的下拉框中选择需要推送的告警检查器,点击 Associate;每次关联一个,重复操作关联多个
  3. 如需推送 Syslog 告警,在 Associated Syslog Rules 区域同样选择规则并点击 Associate
确认每个检查器的 Send recovery notification 为开启状态(新建检查器时默认开启;已有检查器在顶栏 Observium 菜单 → Alert Checks 中打开检查器,点击 Edit Check 查看),否则检查恢复时 Observium 不发送通知,Flashduty 中的告警不会关闭。
3

验证生命周期

Observium 社区版的网页界面没有联系人测试按钮,请在 Observium 安装目录(通常为 /opt/observium)中用命令行发送测试通知,<contact_id> 为 Contacts 列表中该联系人的 ID:
测试通知使用 Observium 自带的示例数据,其中的链接都指向 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 的外部访问地址,命令行发送通知时用它生成链接
通知通道和告警检查器的说明请参阅 Observium 文档 Transports 和 Alert Checkers。