Prometheus监控系统(7)AlertManager告警配置

TangLu 系统运维 2019-07-30 17843 0

一、 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(触发告警)三种,邮箱里也会收到告警邮件,同一个分组下的告警事件会整合在一个邮件中

alert3.jpg

alert4.jpg


三、Grafana配置部分

1、如果需要使用Grafana来实现报警的话,就要让Grafana能正确连接到告警发送平台。告警平台包括有丁丁、Email、Prometheus Alertmanager、Pagerduty等,不同的告警平台设置略有不同。

alerting1.png


2、告警平台添加完成后,开始为监控项设置报警条件。编辑需要告警的图形,可以看到其中有专门设置告警的地方,然后要配置一个Conditions,也就是要写一条WHEN max() OF ( query A,1m,now) IS ABOVE 2000 这样的规则出来

alerting2.png


3、WHEN max() OF ( query A,1m,now) IS ABOVE 2000这个规则大致含义是说:取1分钟内的数据,如果最大值大于2000就触发告警,那个A是获取数据的查询语句,如图

alerting3.png


4、配置完成后在图形上就会出现一条红线,并显示了告警的阈值

评论