我需要通过alertmanager通过prometheus .yml文件向Slack上的多个通道发送特定警报。
目前我当前的配置是一对一的,这意味着一个警报针对一个通道。因此,警报“vs_replica_sql_slave_status”转到“slack_monitoring_prod”
普罗米修斯.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",alia
labels:
severity: "critical"
annotations:
identifier: "{{ $labels.alias }}"
description: "Slave Status not running"
alertmanager.yml:
routes:
- match:
severity: critical
receiver: slack_monitoring_prod
我还需要将警报发送到另一个频道,即:
- match:
severity: critical_dwh
receiver: critical_dwh
在第一个代码块中,我有标签>严重性>关键,它指向第一个通道。是否可以添加另一个标签来指向第二个通道,或者这会破坏整个配置吗?即:
labels:
severity: "critical"
severity: "critical_dwh"
任何有关如何执行此操作的建议或方法将不胜感激。
两个标签不能使用相同的密钥。相反,您可以添加额外的标签:
labels:
severity: critical
dwh: critical
然后您可以将每个标签路由到不同的接收器。如果您希望警报到达多个接收者,请记住使用
continue: true
让管道继续匹配。
route:
routes:
- receiver: slack_monitoring_prod
matchers:
- severity = critical
continue: true
- receivers: dwh_monitoring_prod
matchers:
- dwh = critical
您可以使用
amtool
(Alertmanager 附带)来验证您的路由。
amtool config routes test --config.file /path/to/alertmanager.yml severity=critical
amtool config routes test --config.file /path/to/alertmanager.yml dwh=critical
处理此问题的一种方法是使用警报抑制,这是 Prometheus Alertmanager 中的一项功能,允许您根据某些条件抑制警报。
然后在Alertmanager配置文件中添加抑制规则,以在特定警报触发时抑制一般警报:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'critical'
equal: ['instance']