如何通过Prometheus配置将单告警发送至多个Slack频道?
实现Prometheus告警同时推送至多个Slack频道的可行方案
问题背景
当前已配置Prometheus的vs_slave_status告警通过Alertmanager发送至slack_monitoring_prod频道,需求是将该告警同时推送至critical_dwh频道。尝试在告警规则中添加重复severity标签的方式不可行——YAML不允许重复键,后定义的标签会覆盖前一个,无法实现多频道推送。
可行解决方案
方案1:新增专属标签,通过多路由匹配
在Prometheus告警规则中新增一个自定义标签(如team: dwh),然后在Alertmanager中配置两个独立路由分别匹配对应条件。
修改后的prometheus.yml:
groups: - name: vs_replica_sql_slave_status rules: - alert: vs_slave_status for: 2m expr: mysql_global_status_slave_running{instance=~"vs-replica.+",alias!~"vs-replica-test"} == 0 labels: severity: "critical" team: "dwh" # 新增自定义标签 annotations: identifier: "{{ $labels.alias }}" description: "Slave Status not running"
修改后的alertmanager.yml:
routes: # 原有路由:所有critical级别告警发至slack_monitoring_prod - match: severity: critical receiver: slack_monitoring_prod # 新增路由:匹配vs_slave_status告警+team=dwh标签,发至critical_dwh - match: alertname: vs_slave_status team: dwh receiver: critical_dwh
方案2:利用Alertmanager的continue字段实现路由穿透
无需修改Prometheus配置,通过开启路由的continue: true,让告警匹配当前路由后继续匹配后续路由,结合告警名称匹配实现多频道推送。
修改后的alertmanager.yml:
routes: # 原有路由,开启continue让告警继续向下匹配 - match: severity: critical receiver: slack_monitoring_prod continue: true # 匹配特定告警名称,推送至critical_dwh - match_re: alertname: ^vs_slave_status$ receiver: critical_dwh
方案3:创建聚合接收器统一推送
在Alertmanager中定义一个包含两个Slack频道配置的聚合接收器,将vs_slave_status告警直接路由到该接收器,一次性推送至两个频道。
修改后的alertmanager.yml:
receivers: # 原有Slack接收器 - name: slack_monitoring_prod slack_configs: - channel: "#slack_monitoring_prod" api_url: "your-slack-webhook-url" # 其他Slack配置(如标题、模板等) # 新增critical_dwh接收器 - name: critical_dwh slack_configs: - channel: "#critical_dwh" api_url: "your-slack-webhook-url" # 其他Slack配置 # 聚合接收器:包含两个频道的配置 - name: vs_slave_multi_channel slack_configs: - channel: "#slack_monitoring_prod" api_url: "your-slack-webhook-url" # 对应slack_monitoring_prod的配置 - channel: "#critical_dwh" api_url: "your-slack-webhook-url" # 对应critical_dwh的配置 routes: # 优先匹配vs_slave_status告警,使用聚合接收器 - match: alertname: vs_slave_status receiver: vs_slave_multi_channel # 保留原有路由,处理其他critical级别告警 - match: severity: critical receiver: slack_monitoring_prod
内容的提问来源于stack exchange,提问作者Deyan Farrugia
相关产品推荐
相关产品推荐

