Prometheus监控系统(7)AlertManager告警配置
一、 Alertmanager 介绍
AlertManager 是 Prometheus 生态关键组件,它像是一个告警管理中枢,可以对整个 Prometheus 监控系统中出现的告警进行分组、去重、抑制和分发工作,确保告警信息的精准送达和高效处理。
二、安装与配置Alertmanager
在Prometheus官网下载好二进制安装包并解压,通过alertmanager.yml文件就可以进行告警分组、告警路由、告警抑制、告警静默等配置。下面是一个不带告警分组与路由的最基本配置说明
global: resolve_timeout: 5m #持续5分钟没收到告警信息后认为问题已解决 smtp_smarthost: 'smtp.qq.com:465' #告警邮件发送者SMTP地址 smtp_from: '13841276@qq.com' #发件者邮箱 smtp_auth_username: 'tanglu' #账号 smtp_auth_password: '123456' #邮箱专用授权码,不是QQ登录密码,在QQ邮箱中设置 smtp_require_tls: false #关闭tls授权 route: #定义告警路由规则,可以定义多个receiver和group实现告警分组 group_by: ['test_group'] #分组配置,在Prometheus的rules中进行分组的定义,一个分组内的告警会在一个邮件中 group_wait: 10s #分组等待时间,可以理解为将10秒内的相同事件作为一个分组,如果太短分组就没有意义 receiver: 'ops' #告警接受者,具体信息将在receivers区域中配置 receivers: #告警邮件接受者配置部分 - name: 'ops' #和上面route部分中的receiver一致,这里是定义具体的动作 email_configs: #接收器为email,除此还有其他接收器可以使用 - to: '13841276@qq.com' #告警邮件发送对象 send_resolved: true #接收告警恢复邮件 #告警抑制配置。如下配置表示发生多个告警时如果它们node标签的值相同,那么产生critical级别的告警就不对warning级别告警进行通知,告警级别的标签是在Prometheus的rules中定义 inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: - node
2、Alertmanager路由与告警分组设置
当有告警事件发生时都会从配置文件中顶级的route开始路由,每一个路由都可以定义接受人以及匹配规则。如果route中设置continue的值为false,那么告警在匹配到第一个子节点之后就停止继续匹配。如果continue为true则会继续进行后续匹配。如果当前告警匹配不到任何的子节点,那该告警将会基于当前路由节点的接收器配置方式进行处理。告警匹配可以基于字符串或者基于正则表达式完成。
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: '13841276@qq.com'
smtp_auth_username: '13841276'
smtp_auth_password: 'mtdvgvofyfgybzae'
smtp_require_tls: false
route: #默认路由
group_by: ['instance','job']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h #重复告警间隔
receiver: 'email' #默认接受者
routes: #子路由,不满足子路由的都走默认路由
- match: #普通匹配
severity: critical
receiver: leader
- match_re: #正则匹配
severity: ^(warning|critical)$
receiver: ops
receivers: #定义三个接受者,和上面三个路由对应
- name: 'email'
email_configs:
- to: '13841276@qq.com'
- name: 'leader'
email_configs:
- to: '88888@qq.com'
- name: 'ops'
email_configs:
- to: 'ops@qq.com'
3、使用amtool检查配置文件语法
./amtool check-config alertmanager.yml
4、启动alertmanager,服务启动后默认监听在9093端口,可以直接访问该端口看到一些配置信息,静默配置也是在这个界面做操作
./alertmanager --config.file=alertmanager.yml
二、Prometheus配置部分
1、修改prometheus.yml的alerting部分,让alertmangers能与Prometheus通信
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.100:9093
rule_files: #指定告警规则和行为的配置路径
- "rules/*.yml"
scrape_configs:
- job_name: 'alertmanager'
static_configs:
- targets: ['192.168.1.100:9093']
2、在Prometheus配置中添加具体告警规则。为了使告警信息具有更好的可读性,Prometheus支持使用变量来获取指定标签中的值。比如$labels.<labelname>变量可以访问当前告警实例中指定标签的值。$value可以获取当前PromQL表达式计算的样本值。在创建规则文件时,建议为不同对象建立不同的文件,比如web.yml、mysql.yml
vim /etc/prometheus/rules/node_alerts.yml
groups:
- name: node_alerts #告警分组,一个组下的告警会整合在一个邮件中
rules:
- alert: CPU usage high #定义告警事件名
expr: node_cpu:avg_rate 5m > 4 #报警表达式
for: 1m #事件持续时长,0的话代表一满足就触发
labels:
severity: warning #定义了一个名为severity值为warning的标签,用于告警分组
annotations: #邮件中的注释内容,可以引用变量
summary: "Instance {{ $labels.instance }} CPU usgae high" #summary概要信息
description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})" #description详细信息
3、当报警触发后访问9093端口可以看到具体的信息以及告警状态,告警状态分为了Inactive(无事件)、Pending(触发阈值,但未满足告警持续时间)、Firing(触发告警)三种,邮箱里也会收到告警邮件,同一个分组下的告警事件会整合在一个邮件中
三、Grafana配置部分
1、如果需要使用Grafana来实现报警的话,就要让Grafana能正确连接到告警发送平台。告警平台包括有丁丁、Email、Prometheus Alertmanager、Pagerduty等,不同的告警平台设置略有不同。
2、告警平台添加完成后,开始为监控项设置报警条件。编辑需要告警的图形,可以看到其中有专门设置告警的地方,然后要配置一个Conditions,也就是要写一条WHEN max() OF ( query A,1m,now) IS ABOVE 2000 这样的规则出来
3、WHEN max() OF ( query A,1m,now) IS ABOVE 2000这个规则大致含义是说:取1分钟内的数据,如果最大值大于2000就触发告警,那个A是获取数据的查询语句,如图
4、配置完成后在图形上就会出现一条红线,并显示了告警的阈值
评论