prometheus+AlertManager实现监控报警
1.AlertManager简介
prometheus自身不具备报警能力,因此需要结合第三方报警程序来实现监控指标告警
AlertManager是一款不错的告警程序,首先由prometheus配置告警规则,当告警规则触发后,会把告警信息推送给altermanager,AlertManager收到告警之后在根据配置的路由,根据报警级别不同分别发送给不同的receive(收件人),AlertManager可以实现email、企业微信等报警
2.部署AlertManager以及配置文件介绍
2.1.部署AlertManager
[root@prometheus-server ~]# tar xf AlertManager-0.21.0.linux-amd64.tar.gz
[root@prometheus-server ~]# mv AlertManager-0.21.0.linux-amd64 /data/AlertManager
2.2.配置文件介绍
global:
resolve_timeout //解析超时时间,也就是报警恢复不是立马发送的,而是在一个时间范围内不在触发报警,才能发送恢复报警,默认为5分钟
smtp_from //收件人的邮箱地址
smtp_smarthost //邮箱提供商的smtp地址
smtp_auth_username //收件人的邮箱账号
smtp_auth_password //邮箱授权码
smtp_require_tls //是否需要tls协议,默认是true
wechart_api_url //微信api地址
wbchart_api_secret //密码
wechat_api_corp_id //机器人应用的id
route:
group_by //采用哪个标签作为分组的依据
group_wait // 分组等待的时间,收到报警不是立马发送出去,而是等待一段时间,看看是否有其他报警,一并发送
group_interval //告警时间间隔
repeat_interval //重复告警时间间隔,可以减少发送告警的频率
receiver // 接收者是谁
receivers:
name //接收者的名字,这里和route中的receiver对应
email_configs
- to //接收者的邮箱地址
2.3.配置AlertManager邮箱告警
1.修改主配置文件
[root@prometheus-server ~]# cd /data/AlertManager/
[root@prometheus-server /data/AlertManager]# vim /data/AlertManager/AlertManager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: '2608306393@qq.com'
smtp_auth_username: '2608306393@qq.com'
smtp_auth_password: 'yzjqxhsranbpdijd'
smtp_require_tls: false
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 10m
receiver: 'mail'
receivers:
- name: 'mail'
email_configs:
- to: '2608306393@qq.com'
2.检测语法
[root@prometheus-server /data/AlertManager]# ./amtool check-config AlertManager.yml
Checking 'AlertManager.yml' SUCCESS
Found:
- global config
- route
- 0 inhibit rules
- 1 receivers
- 0 templates
3.启动AlertManager
[root@prometheus-server /data/AlertManager]# nohup ./AlertManager --config.file="/data/AlertManager/AlertManager.yml" &
4.查看端口
[root@prometheus-server /data/AlertManager]# netstat -lnpt | grep alert
tcp6 0 0 :::9093 :::* LISTEN 31401/./alertmanage
tcp6 0 0 :::9094 :::* LISTEN 31401/./alertmanage
2.4.配置prometheus集成AlertManager
1.修改配置文件
[root@prometheus-server ~]# vim /data/prometheus/prometheus.yml
alerting:
AlertManagers:
- static_configs:
- targets:
- 192.168.81.210:9093 #AlertManager地址
rule_files: #告警规则路径
- "rules/*.yml"
2.创建rules告警规则目录
[root@prometheus-server ~]# mkdir /data/prometheus/rules
3.加载配置
[root@prometheus-server ~]# curl -XPOST 192.168.81.210:9090/-/reload
配置已更新,目前已经可以使用AlertManager报警了
3.告警规则
3.1.告警规则语法
groups: //定义一个告警规则组
- name: general.rules //组名,可以将同一类型的报警放到一个分组中
rules: //定义告警规则,可以有多个
- alert: 主机宕机 //告警名称,也就是告警信息的标题,一个alert代表一个告警规则
expr: up == 0 //表达式,根据表达式的值进行匹配
for: 1m //报警收到后多长时间后发送报警信息
labels: //定义标签
serverity: error //告警级别,有warning、error等
annotations: //定义告警内容
summary: "主机 {{ $labels.instance }} 停止工作" //消息内容,$labels.instance就是监控项中的标签变量
description: "{{ $labels.instance }} job {{ $labels.job }} 已经宕机5分钟以上!" //详细描述
3.2.告警规则状态
告警规则分为三种
-
inactive:无任何报警,一切正常
- 绿色
-
pending:已触发阈值,但未满足告警持续时间,也就是在告警规则中写的for,在for规定的时间内触发都不会发送给AlertManager,当for持续时间一过会立即发送给AlertManager
- 黄色
-
firing:已触发阈值且满足告警持续时间,告警发送给接收者
- 红色
4.创建一个检测主机宕机的告警
每个监控实例都会有一个up监控项,这个监控项的值如果为0表示主机已经宕机,为1表示正常存活
4.1.编写主机宕机告警规则
1.编写规则
[root@prometheus-server /data/prometheus]# vim rules/hostdown.yml
groups:
- name: general.rules
rules:
- alert: 主机宕机
expr: up == 0
for: 1m
labels:
serverity: error
annotations:
summary: "主机 {{ $labels.instance }} 停止工作"
description: "{{ $labels.instance }} job {{ $labels.job }} 已经宕机5分钟以上!"
2.检查语法
[root@prometheus-server /data/prometheus]# promtool check config /data/prometheus/prometheus.yml
Checking /data/prometheus/prometheus.yml
SUCCESS: 1 rule files found
Checking /data/prometheus/rules/hostdown.yml
SUCCESS: 1 rules found
3.加载配置
[root@prometheus-server /data/prometheus]# curl -XPOST 192.168.81.210:9090/-/reload
在页面的status—rules下即可看到我们创建的告警规则
在alert也可以看到告警规则有没有触发,没有触发的情况下是绿色显示
4.2.触发告警规则
将192.168.81.220的mysql_exporter停掉查看告警是否触发
[root@192_168_81_220 ~]# ps aux | grep mysql
[root@192_168_81_220 ~]# kill -9 40268
4.3.查看AlertManager是否已收到报警信息
target页面已经显示down了
红色firing表示已经发送了告警
AlertManager页面也已经收到了主机宕机推送过来的告警信息
4.4.查看是否收到邮件报警内容
已经收到,至此我们的流程已经跑通
4.5.同类告警规则触发
同类告警是指:prometheus的告警规则是对所有监控实例都生效的,也就是当同一种类型的告警触发后会显示在一起,并且发送一封邮件
我们将docker服务停止后,这时就会产生两次同类告警
虽然是两个服务,但是都属于一种报警规则,因此会放在一块
邮件也会发送在一起,这也是我们配置文件中的配置的group_wait这个参数生效,当同一时间同一分组有触发了多条告警规则都会同时发送成一封邮件