我正在尝试配置alertmanager,以便它根据特定标签的值将警报发送到正确的通道。我有3个空闲通道- dev/staging/prod,我希望将来自将"env“标签设置为dev的实例的警报发送到dev空闲通道。Staging和prod显然是以相同的方式工作的。以下是我的配置的一部分:
global:
resolve_timeout: 1m
slack_api_url: 'https://slack-url'
route:
group_by: [...]
receiver: 'default'
routes:
- match:
env: 'prod'
receiver: 'slack-notifications-prod'
- match:
env: 'staging'
receiver: 'slack-notifications-staging'
- match:
env: 'dev'
receiver: 'slack-notifications-dev'
receivers:
- name: 'default'
- name: 'slack-notifications-prod'
...
- name: 'slack-notifications-staging'
...
- name: 'slack-notifications-dev'
...松弛通知接收器都是相同的,它们只有一点不同,那就是适当的通道名称。
当前行为:所有警报都会发送到prod slack通道
预期行为:将警报从" dev“env发送到dev通道,将" staging”发送到staging通道,并将" prod“发送到prod通道。
Alertmanager可以很好地看到这些标签(从alertmanager webUI的信息来判断)。
发布于 2021-04-12 23:57:19
事实证明我的配置是正常的,而且我使用的是一个仅绑定到一个松弛频道的webhook URL,我没有意识到这一点。
发布于 2021-04-12 23:13:12
您必须在第一个匹配项上添加continue: true属性:
global:
resolve_timeout: 1m
slack_api_url: 'https://slack-url'
route:
group_by: [...]
receiver: 'default'
routes:
- match:
env: 'prod'
receiver: 'slack-notifications-prod'
continue: true
- match:
env: 'staging'
receiver: 'slack-notifications-staging'
- match:
env: 'dev'
receiver: 'slack-notifications-dev'
receivers:
- name: 'default'
- name: 'slack-notifications-prod'
...
- name: 'slack-notifications-staging'
...
- name: 'slack-notifications-dev'
...AlertManager将评估子路由,直到没有剩余路由或给定级别的所有路由都与当前警报匹配为止。
在这种情况下,AlertManager将采用评估的当前节点的配置。
continue属性是一个值,用于定义如果同一级别上的路由已经匹配,是否要评估路由同级(属于同一级别)。
https://devconnected.com/alertmanager-and-prometheus-complete-setup-on-linux/
https://stackoverflow.com/questions/67059398
复制相似问题