问题描述
在出现告警时,我们希望立即收到告警消息,而不希望出现过多的延迟。这点邮件告警是无法满足的,因为邮件通知是由客户端定期查找邮箱才触发的,而且部分邮件服务器也不一定支持 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 能够使告警消息继续向下匹配。
参考文献