NAGIOS_ 开头的环境变量(NAGIOS_HOSTNAME、NAGIOS_SERVICEDESC、NAGIOS_NOTIFICATIONTYPE 等)传给它。用一个脚本把这些内容以 标准告警事件 格式推送给 Flashduty 即可:问题通知触发告警,恢复通知关闭告警。
在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。集成类型都选择 标准告警事件,不是 Opsview。使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增集成
- 选择 标准告警事件,点击 保存
- 打开生成的集成卡片,复制 推送地址,形如
https://api.flashcat.cloud/event/push/alert/standard?integration_key=<集成密钥>
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 标准告警事件,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 Opsview 中配置
1
在 Orchestrator 上创建通知脚本
操作路径:Opsview Orchestrator 服务器 › notify_by_flashduty脚本读取的环境变量都在 Opsview 文档列出的通知环境变量中,处理规则如下:
2
在 Orchestrator 上导入脚本并应用变更
操作路径:Opsview Orchestrator 服务器的终端;Opsview › Configuration › Apply Changes以 导入后进入 Configuration › Apply Changes 完成脚本安装。
opsview 用户导入脚本:3
在 Opsview 中添加通知方法
操作路径:Opsview › Configuration › Notification Methods › Add New
保存后再次进入 Configuration › Apply Changes,让新通知方法生效。
4
把通知方法加入用户的 Notification Profile
操作路径:Opsview › Configuration › Users and Roles › Users › 编辑用户 › Notification Profiles › Add NewOpsview 的通知由用户的 Notification Profile 决定,每个要接收 Flashduty 通知的用户都要选择这个通知方法(也可以从右上角的用户名进入 My Profile):
点击 Update,再点击 Submit Changes,最后进入 Configuration › Apply Changes 使配置生效。也可以在 Shared Notification Profiles 中创建共享配置,分配给多个用户。
5
用 test_notifications 测试脚本并确认真实告警
操作路径:Opsview Orchestrator 服务器的终端Opsview 提供 测试会向 Flashduty 发送真实事件,确认告警出现后在 Flashduty 中手动关闭;集成显示 最新事件时间,说明脚本和推送地址正确。该测试绕过通知方法和 Notification Profile,不能证明它们已生效,请在 Opsview 中让一个受监控对象真实变为非 OK 状态再恢复,确认问题与恢复通知都到达 Flashduty。没有出现告警时,按下文“排查问题”查看脚本实际收到的环境变量。
test_notifications 工具,模拟 Nagios Core 通知时设置的环境变量,用它测试脚本:如果通知方法设置为在 Collector 上运行,需要在 Collector 服务器上同样测试脚本。
恢复与去重
- 同一台主机或同一个服务始终使用同一个 Alert Key,重复的问题通知(例如 Opsview 的重复通知间隔)只更新同一条告警,
RECOVERY通知恢复它 - 服务从 WARNING 变为 CRITICAL 时,等级在同一条告警上更新
- 确认(
ACKNOWLEDGEMENT)、抖动(FLAPPING*)和停机维护(DOWNTIME*)通知被脚本忽略,不会在 Flashduty 产生事件
排查问题
- 没有收到告警:确认 Notification Profile 中选择了
Flashduty且已执行 Apply Changes;在 Opsview 的 Notifications View 查看通知是否已发送;用test_notifications单独测试脚本 - 测试成功但真实告警没有推送:脚本在真实通知中读取的是 Opsview 传入的环境变量;在脚本开头加入
{ date; echo "Called with $@"; env; echo; } >> /tmp/env.txt(Opsview 文档给出的排查方法)查看实际收到的变量 - 告警没有恢复:确认 Notification Profile 勾选了恢复状态;Nagios 只在发过问题通知后才发送对应的恢复通知
- Flashduty 返回参数错误:确认
Command里的推送地址完整,包含integration_key