Prometheus 和 Alertmanager - 基于环境标签的路由

Prometheus and Alertmanager - route based on env label

我正在尝试配置 alertmanager,以便它根据特定标签的值将警报发送到正确的渠道。我有 3 个松弛通道 - dev/staging/prod,我希望来自将“env”标签设置为 dev 的实例发送到开发松弛通道的警报。分期和生产显然会以相同的方式工作。这是我的配置的一部分:

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'
...

slack-notifications 接收者都是一样的,它们只有一点不同,那就是合适的频道名称。

当前行为:所有警报都发送到 prod slack 通道

预期行为:来自“dev”环境的警报被发送到开发通道,“staging”被发送到 staging 通道,“prod”被发送到 prod 通道。

A​​lertmanager 可以很好地识别这些标签(根据来自 alertmanager webUI 的信息判断)。

您必须在第一个匹配项上添加 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/

事实证明我的配置没有问题,我使用的是仅绑定到一个松弛通道的 Webhook URL,我没有意识到这一点。