在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 Sematext,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 Sematext,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 Sematext 中配置
1
创建 Custom 通知钩子
- 登录 Sematext Cloud(美国区
apps.sematext.com或欧洲区apps.eu.sematext.com),在左侧菜单选择 Alerts → Notification Hooks - 点击 New Notification Hook,再点击 Custom 卡片
- Hook Name 填写
Flashduty - URL 粘贴 Flashduty 集成的完整推送地址,地址中需包含
integration_key - Send data as 选择 Json,HTTP method 选择 Post
- 点击 Add parameter,逐行添加下表中的参数。左列是参数名,右列是值,值中的
$变量由 Sematext 在发送时替换
添加完成后,Preview 中的请求体应为:
- 点击 Send Test Notification,确认请求成功,然后点击 Save Notification Hook
2
在告警规则中使用该钩子
- 打开需要接入的告警规则(Alerts → Alert Rules),进入编辑页的 Notifications 页签
- 打开 Alert me when the value goes back to non-alert level。该开关默认关闭,不打开时 Sematext 不会发送恢复正常通知,Flashduty 中的告警也不会恢复
- 在 Additionally send to 下拉框中选择刚创建的
Flashduty钩子,保存规则。关闭 Use account-default notification hooks for this alert 时,该下拉框名为 Send to
3
验证
- 让一条告警规则触发,例如给一台主机建立 Heartbeat 告警后停止该主机上的 Sematext Agent,确认 Flashduty 收到活动告警
- 恢复数据上报,等 Sematext 发出恢复正常通知后,确认原告警恢复
Send Test Notification 发出的请求不属于任何告警规则,Flashduty 收到后直接返回成功,不会创建告警。
Alert Key
Sematext 在每条告警通知中都会自动带上告警规则 ID(
ruleId)、规则名称(alertName),规则设置了 Group by 时还会带上触发告警的分组标签值(filters,例如 {os.host=web-01})。这些字段不需要在通知钩子中配置。
Alert Key 由 ruleId 和 filters 中的全部分组标签计算,标签的顺序不影响结果。因此:
- 同一告警规则、同一分组的触发和恢复通知归入同一条告警
- 同一告警规则按主机等标签分组时,每个分组各自一条告警
- 告警等级、描述、时间和规则名称的变化不会改变 Alert Key
alertName 但缺少 ruleId 的请求会被拒绝。
状态和告警等级
backToNormal 为 true 时告警恢复,其余情况均视为触发。告警等级来自告警规则的优先级($priority):
匹配时不区分大小写。
标签
排查问题
- Flashduty 返回参数错误:确认 URL 完整且包含
integration_key,Send data as 选择的是 Json - 告警没有恢复:确认告警规则 Notifications 页签中打开了 Alert me when the value goes back to non-alert level,通知钩子中添加了
backToNormal参数且值为$backToNormal,并且该分组仍在上报数据 - 同一规则下不同主机的告警合并到了一起:在告警规则中按主机标签(如
os.host)设置 Group by,并把聚合方式设为分别处理(all separately) - 告警等级都是 Warning:检查推送内容中的
priority,参见上文状态和告警等级的说明