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:创建通知脚本
在 Opsview Orchestrator 服务器上创建脚本notify_by_flashduty,并设置为可执行(chmod +x)。脚本使用 curl;如果通知方法在 Collector 上运行,Collector 上也要安装 curl,并能访问 api.flashcat.cloud。推送地址通过脚本的第一个参数传入,不写在脚本里。
步骤 2:安装并测试脚本
在 Orchestrator 上以opsview 用户导入脚本:
test_notifications 工具,模拟 Nagios Core 通知时设置的环境变量,用它测试脚本(<推送地址> 替换为步骤 1 复制的地址):
如果通知方法设置为在 Collector 上运行,需要在 Collector 服务器上同样测试脚本。
步骤 3:添加通知方法
- 进入 Configuration → Apply Changes 完成脚本安装
- 进入 Configuration → Notification Methods,点击 Add New
Name填Flashduty,勾选Enable,Run on选择在 Orchestrator 或 Collector 上运行Command填notify_by_flashduty <推送地址>(脚本默认从/opt/opsview/monitoringscripts/notifications读取,参数写在脚本名后面)- 保存后再次进入 Configuration → Apply Changes,让新通知方法生效
步骤 4:把通知方法加入通知配置
Opsview 的通知由用户的 Notification Profile 决定,每个要接收 Flashduty 通知的用户都要选择这个通知方法:- 进入 Configuration → Users and Roles → Users,编辑用户(或从右上角的用户名进入 My Profile),打开 Notification Profiles 标签页,点击 Add New
- Alert me by 选择
Flashduty,During 选择生效的时间段 - 在 Host and Services 中选择要通知的主机组和服务检查,并勾选要通知的状态,需要同时包含问题状态和恢复状态,否则 Flashduty 收不到恢复通知
- 点击 Update,再点击 Submit Changes,最后进入 Configuration → Apply Changes 使配置生效
恢复与去重
- 同一台主机或同一个服务始终使用同一个 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