Alertmanager主要用于接收Prometheus发送的告警信息,它支持丰富的告警通知渠道,并且可以对告警信息进行分组、抑制、静默。

在prometheus配置中配置alertmanager地址

alerting:
alertmanagers:
- static_configs:
- targets:
# 这边配置alertmanager地址喝端口,alertmanager默认端口是9093
- 127.0.0.1:9093

编写报警规则

rule_files:
- "rules/*.yml"
# 创建rules目录
mkdir rules
[root@localhost prometheus-2.8.1.linux-amd64]# cat rules/test.yml 
groups:
- name: general
rules:
- alert: instance down
# 可以在prometheus页面查看up,0表示instance已经down,也就是prometheus无法获取被监控端数据
expr: up == 0
# 表示持续时长,也就是 该instance已经 down 了1分钟 ,就发送报警信息给alertmanager
for: 1m
labels:
severity: error
annotations:
summary: "instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

使prometheus配置生效

# 查看配置文件是否正确
./promtool check config prometheus.yml
# 发送hup信号
kill -hup 18745

下载配置alertmanager

地址:https://github.com/prometheus/alertmanager

# 解压
tar zxvf alertmanager-0.20.0-rc.0.linux-amd64.tar.gz
cd alertmanager-0.20.0-rc.0.linux-amd64

配置报警信息

[root@localhost alertmanager-0.20.0-rc.0.linux-amd64]# cat alertmanager.yml 
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: 'xxxxxxxxx@qq.com'
smtp_auth_username: 'xxxxxxxxx@qq.com'
smtp_auth_password: 'xxxxxxxxxxxxx'
smtp_require_tls: false
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'xxxxxxxx@gmail.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

启动

./alertmanager --config.file=alertmanager.yml

配置文件介绍

(1)global

全局配置,包括报警解决后的超时时间、SMTP相关配置、告警通知API接口等

  1. smtp_smarthost:smtp服务器,以QQ邮箱为例,就是smtp.qq.com
  2. smtp_from:邮件发送方
  3. smtp_auth_username:同上,写一样即可
  4. smtp_auth_password:对应上面邮箱的授权码,需要去qq邮箱那边开通相应的服务
  5. smtp_require_tls:是否启用tls

(2)route

路由,用来设置告警分发策略

group_by:根据标签的key进行分组

group_wait:等待时长,告警发送之前的等待时间

group_interval:当组内已经发送了一个告警,组内若有新增告警需要等待的时间

repeat_interval:告警已经发送,且无新增告警,若重复告警需要间隔多久

receiver:通知对象

(3)receivers

接收告警的对象

(4)inhibit_rules

抑制相关的配置

测试

停掉被监控端上的node_exporter,等待告警

可以看到prometheus的alert上出现了instance down的提示

顺便提一下alert告警状态

  • Inactive:什么都没发生
  • Pending:已触发告警阈值,但是还没有满足rules.for字段告警持续时间
  • Firing:已触发阈值并且满足持续告警时间

邮箱随之也受到了邮件

重新恢复node_exporter也会收到恢复的告警邮件