prometheus配置邮件告警
promethues本身没有告警功能,需要通过告警组件alertmanager来实现告警
告警逻辑:根据prometheus.yml文件中配置的监控指标,rule.yml文件中配置的告警规则,当满足告警条件的时候,将告警信息推送给alertmanager,然后alertmanager来实现告警
altermanager部署:
1、解压文件alertmanager-0.21.0.linux-amd64.tar.gz到/usr/local目录下,进入目录后的内容如下:

2、编辑服务启动文件,vim /lib/systemd/system/alertmanager.service ,添加内容如下:

3、 加载配置文件,并启动alertmanager,执行命令如下:
systemctl daemon-reload、systemctl enable alertmanager 、systemctl start alertmanager
4、编辑配置文件alertmanager.yml,修改内容如下:

说明:
- smtp位置表示配置发送邮件的邮箱信息
- templates表示自定义的报警模板信息
- route表示路由分发策略
- group_wait表示第一次等待多久时间发送一组警报的通知
- group_interval表示在发送新警报前的等待时间
- repeat_interval 表示发送重复警报的周期
- receiver 表示发送警报的接收者的名称,与下面的receivers中的name相同,可以写邮件或者微信或者钉钉或者其他
- email_configs表示邮箱配置信息,to后面为接收人信息,多个邮箱地址用逗号分隔
- html:指定发送邮件的的方式为html方式,与自定义模板中名称一致
- send_resolved: 是否发送恢复信息,选择true
- headers: 设置邮件标题,可自定义设置
- inhibit_rules表示抑制规则,默认即可
设置完成后,重启alertmanager,systemctl restart alertmanager
5、在模板目录template中(需自行创建),编辑模板文件mail.tmpl,添加内容如下(也可以根据需要自定义):

从上图可以看出,告警模板分为警报和恢复两个模块,通过if进行判断,28800e9表示加8个小时,因为alertmanager默认获取的时间为UTC时间,如果不加告警时间会相差8个小时
告警规则配置:
1、定义规则配置文件rule.yml,本文中的文件创建位置为/etc/prometheus中(可自定义),文件内容如下:

说明如下:
- name:设置的告警分组名称
- alert:设置的告警名称
- expr:执行的表达式,判断进程是否等于0,如果是则告警 job的值为prometheus.yml文件中设置的
- for:告警持续时间为10s
- severity:设置告警等级
- summary:告警信息
- description:告警详情
- value:值,此值表示上面expr表达式获取的值
- instance: 实例名称,从prometheus.yml文件中获取
- recover:设置的恢复信息
注意:上面的$labels.job以及$labels.instance都是从prometheus.yml文件中获取
本例子中只定义了一个告警规则,如果有多个可以在下方继续配置,从alert开始,上面的不用动,如图:

注意:不一定只有一个name和rules,也可以根据需要定义多个
prometheus.yml文件配置:

说明:
- targets:指定alertmanager的IP地址和端口
- rule_files:指定rule.yml文件,默认位置即为/etc/prometheus目录中,不一定名称是rule.yml,可以是多个然后通过*.yml的方式来引用
注意:在promehtus.yml文件中,配置监控指标的时候,建议将instance配置成IP地址,这样在告警模板中获取时显得更直观,如图:

测试告警
停止掉node-exporter进程,在prometheus告警界面,可以看到如下:

说明:
- Inactive: 表示非活动状态,表示正在监控,但是还未有任何警报触发
- Pending: 表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所以等待验证,一旦所有的验证都通过,则将转到
Firing状态 - Firing: 将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警报解除,则将状态转到
Inactive,如此循环。
当变成Firing状态时,查看邮箱,可以看到告警内容如下:

当告警恢复的时候,邮件内容如下:

至此,邮件告警配置完成!!!
注意:如果告警时间与本地时间相差8小时,首先可以查看当前的系统时间,通过命令date查看,如果当前时间没问题,但是告警还是相差8个小时,此时就要查看时区设置,altermanager获取的默认告警时间为utc时间,通过命令查看当前系统时间,如图:

此时可以在告警模板中,将UTC时间加上8个小时,即为北京时间,配置如下:

再次测试告警以及恢复,可以发现,时间已经都是北京时间
备注:
如果要添加多个告警内容值,只需要编辑规则文件,然后在告警模板中获取对应的值即可


