在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 OpenSearch,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 OpenSearch,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 OpenSearch 中配置
需要安装 Alerting 和 Notifications 插件(OpenSearch 默认自带),并有创建通知渠道和 Monitor 的权限。
1
创建自定义 Webhook 通知渠道
- 在 OpenSearch Dashboards 中进入 Notifications → Channels → Create channel
- 填写渠道名称,Channel type 选择 Custom webhook
- Define endpoints by 选择 Webhook URL,将 Flashduty 集成的完整推送地址粘贴进去,地址中需包含
integration_key - Method 选择
POST - 在 Webhook headers 中添加
Content-Type: application/json - 点击 Create
opensearch.notifications.core.http.host_deny_list,需要保证 api.flashcat.cloud 不在其中。2
在 Monitor 的触发器中添加动作
- 进入 Alerting → Monitors,创建或编辑一个 Per query monitor 或 Per cluster metrics monitor
- 在 Triggers 中添加触发器,填写 Trigger name、Severity level(1 到 5)和触发条件
- 在触发器下点击 Add action,Notification channel 选择上一步创建的渠道
- 将下面的模板完整粘贴到 Message,不要改动引号和字段名:
- 保存 Monitor
hit_count 是 Per query monitor 查询命中的文档数,Per cluster metrics monitor 没有这个值,会推送空字符串,不影响告警。Per bucket、Per document 和 Composite monitor 的通知变量与上面的模板不同,本集成不支持。Action throttling 可以限制通知频率。节流期间不推送通知,节流时长内没有新通知,告警仍按下面的超时自动关闭时长关闭。3
开启超时自动关闭
Per query 和 Per cluster metrics 的触发器只在条件成立时执行动作,条件不再成立后 OpenSearch 不会发送任何通知。请在接收这些告警的协作空间中开启超时自动关闭,超时计时起点 选择 故障触发,超时时长建议设置为 1 小时。条件恢复后,告警在超时时长到达时关闭;如果条件仍然成立,超时关闭后 Monitor 的下一次通知会重新创建告警。
4
验证
- 在 Notifications → Channels 中打开该渠道,点击 Send test message,Flashduty 会创建一条标题为
OpenSearch test notification的 Info 告警,验证后请手动关闭 - 让 Monitor 的触发条件真正成立(例如临时降低阈值),等待 Monitor 下一次运行,确认 Flashduty 收到告警,等级与触发器的 Severity level 对应
- 恢复阈值,等待超时自动关闭时长到达,确认告警自动关闭
Alert Key
Flashduty 用 Monitor ID 和触发器 ID 计算 Alert Key,即模板中的
monitor_id 和 trigger_id。同一个 Monitor 的同一个触发器,每次通知使用同一个 Alert Key,因此合并为一条告警;不同的触发器、不同的 Monitor 各有各的告警。Monitor 名称、触发器名称、等级、命中数和时间段的变化不会改变 Alert Key。monitor_id 或 trigger_id 为空的通知会被拒绝并返回参数错误。
模板中没有使用 ctx.alert.id:触发器第一次执行动作时,OpenSearch 还没有创建告警,这个变量为空。
状态和告警等级
OpenSearch 触发器的 Severity level 取值 1(最高)到 5(最低),Flashduty 按下表映射:
每条通知都是触发状态,Flashduty 不会因为 OpenSearch 的通知而自动恢复告警,恢复由超时自动关闭完成,也可以在 Flashduty 中手动关闭。
标签
排查问题
- Flashduty 返回参数错误:确认 Message 是完整的模板,
monitor_id和trigger_id都有值;确认 URL 完整且包含integration_key - OpenSearch 中通知发送失败:在 Notifications → Channels 中对该渠道点击 Send test message 查看错误,常见原因是集群无法访问
api.flashcat.cloud或该域名在host_deny_list中 - 告警没有自动关闭:确认协作空间已开启超时自动关闭,计时起点为 故障触发
- 在 OpenSearch 中认领(Acknowledge)告警后没有新通知:OpenSearch 对已认领的告警不再执行动作,Flashduty 的告警会在超时自动关闭后关闭
- 告警标题里出现空的触发器名称:触发器没有填写名称时,Flashduty 只用 Monitor 名称作标题;两者都为空时标题为
OpenSearch alert: 触发器 ID