Alertmanager主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组,策略路由,是一款前卫的告警通知系统。
安装使用
1、获取二进制安装包,直接去prometheus官方去获取就行
export VERSION=0.18.0
wget https://github.com/prometheus/alertmanager/releases/download/v$VERSION/alertmanager-$VERSION.linux-amd64.tar.gz
tar xvf alertmanager-$VERSION.linux-amd64.tar.gz
2、解压成功后,使用 ./alertmanager –version 来检查是否安装成功
3、Alertmanager 默认端口为 9093。
4、配置文件
global:
resolve_timeout: 2h
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 10s
repeat_interval: 1h
receiver: 'webhook'
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://example.com/xxxx'
send_resolved: true
- 全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容;
- 模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等;
- 告警路由(route):根据标签匹配,确定当前告警应该如何处理;
- 接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
- 抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生
比如使用email告警,配置如下:
global:
smtp_smarthost: 'smtp.qq.com:587'
smtp_from: 'xxx@qq.com'
smtp_auth_username: 'xxx@qq.com'
smtp_auth_password: 'your_email_password'
route:
# If an alert has successfully been sent, wait 'repeat_interval' to resend them.
repeat_interval: 10s
# A default receiver
receiver: team-X-mails
receivers:
- name: 'team-X-mails'
email_configs:
- to: 'team-X+alerts@example.org'
5、产生告警,在prometheus下添加 alert.rules 文件,指定告警规则
文件中写入以下简单规则作为示例。
ALERT memory_high
IF prometheus_local_storage_memory_series >= 0
FOR 15s
ANNOTATIONS {
summary = "Prometheus using more memory than it should {{ $labels.instance }}",
description = "{{ $labels.instance }} has lots of memory man (current value: {{ $value }}s)",
}
修改 prometheus.yml 文件
添加以下规则:
rule_files:
- "alert.rules"
启动AlertManager服务
./Alertmanager -config.file=simple.yml
启动prometheus服务
./prometheus -Alertmanager.url=http://localhost:9093
根据以上步骤设置,此时 “team-X+alerts@example.org” 应该就可以收到 “xxx@qq.com” 发送的告警邮件了。
架构原理
- 从左上开始,Prometheus 发送的警报到 Alertmanager;
- 警报会被存储到 AlertProvider 中,Alertmanager 的内置实现就是包了一个 map,也就是存放在本机内存中,这里可以很容易地扩展其它 Provider;
- Dispatcher 是一个单独的 goroutine,它会不断到 AlertProvider 拉新的警报,并且根据 YAML 配置的 Routing Tree 将警报路由到一个分组中;
- 分组会定时进行 flush (间隔为配置参数中的 group_interval), flush 后这组警报会走一个 Notification Pipeline 链式处理;
- Notification Pipeline 为这组警报确定发送目标,并执行抑制逻辑,静默逻辑,去重逻辑,发送与重试逻辑,实现警报的最终投递;