「Alertmanager」- 将告警信息发往多个渠道(Slack, Email, …)

问题描述

在出现告警时,我们希望立即收到告警消息,而不希望出现过多的延迟。这点邮件告警是无法满足的,因为邮件通知是由客户端定期查找邮箱才触发的,而且部分邮件服务器也不一定支持 IDLE 命令,因此使用邮件告警无法保证消息的即时性。此外单一的告警渠道无法满足容错的要求,比如邮箱服务出现问题,我们将错过或无法收到告警信息。

鉴于此,除了使用邮件告警,我们还需要接入 IM 进行告警通知。这便涉及将告警信息发送到多个通知渠道。

该笔记将记录:在 Alertmanager 中,将告警消息发送到多个告警渠道的方法,以及注意事项、常见问题的处理。

解决方案

方法一、通过 receiver 配置

在 receiver 中,单个条目能够包含多个告警渠道的配置:

receivers:
  - name: slack_and_email
    # Slack
    slack_configs:
      - api_url: '<THE_WEBHOOK_URL>'
        channel: '#general'
      - api_url: '<ANOTHER_WEBHOOK_URL>'
        channel: '#alerts'
    # Email
    email_configs:
      - to: 'k4nz@example.com'

route:
  receiver: slack_and_email

方法二、通过 route continue 参数

# 首先,我们定义多个不同的 receiver 信息
receivers:
  - name: slack
    slack_configs:
      - api_url: THE_WEBHOOK_URL
        channel: '#general'
  - name: email
    email_configs:
      - to: 'k4nz@example.com'

# 然后,在 route 中通过 continue 参数,是告警消息进行多个匹配
route:
 receiver: slack  # Fallback,必须设置 receiver 字段
 routes:
   - match:
       severity: page
     receiver: slack
     continue: true
   - match:
       severity: page
     receiver: pagerduty

通常告警消息的 Lable 匹配 match 之后,不会继续向下匹配。通过 continue: true 能够使告警消息继续向下匹配。

参考文献

Sending alert notifications to multiple destinations – Robust Perception | Prometheus Monitoring Experts