如何在Grafana单告警规则中按触发原因向不同联系人发邮件?
解决方案
要实现按触发原因分联系人发送告警,Grafana可以通过两种方式实现,具体如下:
方法一:拆分独立告警规则
这是最直观且不易出错的方式,把不同触发场景拆成两个独立规则:
- 针对匹配条件触发的场景:复制原规则,删除"No Data"和"Error"的触发配置,只保留阈值/条件匹配的触发逻辑,将通知渠道设置为联系人2。
- 针对错误/无数据的场景:新建规则,查询逻辑可复用原规则的查询(或专门检测查询是否异常),在规则的"Alert state"配置里,仅勾选"No Data"和"Error"时触发告警,将通知渠道设置为联系人1。
- 注意:确保两个规则的名称、标签区分开,避免混淆。
方法二:利用通知策略的条件路由
如果不想拆分规则,可通过Grafana的通知策略实现动态路由(需Grafana v8.0及以上版本支持):
- 进入
Alerting > Notification policies,点击根策略旁的Add policy添加子策略。 - 第一个子策略(错误/无数据):
- 设置匹配条件:
alert.status == "error" || alert.status == "no_data" - 选择联系人1对应的通知渠道,保存。
- 设置匹配条件:
- 第二个子策略(匹配条件触发):
- 设置匹配条件:
alert.status == "firing" - 选择联系人2对应的通知渠道,保存。
- 设置匹配条件:
- 调整策略优先级:确保两个子策略的优先级高于根策略,Grafana会按从上到下的顺序匹配策略。
额外提示
- 可以在告警规则的
Annotations中添加触发原因的标识,比如Reason: {{ .Status }},方便在通知内容里展示触发类型。 - 测试时可手动构造不同场景:比如修改查询语句制造错误,或者停止数据源产生数据模拟无数据,验证通知是否正确发送给对应联系人。
内容的提问来源于stack exchange,提问作者BC Smith
相关产品推荐
相关产品推荐

