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