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

时间:2021-04-12 13:35:40

标签: monitoring prometheus prometheus-alertmanager

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

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 通道。

Alertmanager 可以很好地看到这些标签(从来自 alertmanager webUI 的信息来看)。

2 个答案:

答案 0 :(得分:0)

您必须在第一场比赛中添加 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/

答案 1 :(得分:0)

结果证明我的配置很好,而且我使用的 webhook URL 只绑定到一个 slack 频道,我不知道这一点。