本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Prometheus
  • Prometheus监控系统(7)使用Alertmanager或Grafana实现告警

Prometheus监控系统(7)使用Alertmanager或Grafana实现告警

发布:TangLu2019-7-30 13:56分类: Prometheus 标签: Prometheus 普罗米修斯 grafana

Prometheus监控平台中除了负责采集数据和存储,还能定制事件规则,但是这些事件规则要实现告警通知的话需要配合Alertmanager组件来完成(或者使用Grafana Alerting完成告警功能)。AlertManager支持告警分组(将多个告警合并一起发送)、告警抑制(和Zabbix的告警依赖同理)以及告警静默(同一个时间段内不发出重复的告警)功能。

下面是详细的配置步骤:

一、 配置Alertmanager

1、安装与配置Alertmanager

在Prometheus官网下载好二进制安装包,解压后修改alertmanager.yml文件可以进行告警分组、告警路由、告警抑制、告警静默等配置。group告警分组功能将类似性质的警报分为单个通知;inhibition抑制功能是当告警发出后,停止重复发送由此告警引发的其他告警;silences静默功能则是通过Web端对指定的标签进行告警暂停的功能,有点像Zabbix的维护功能。

下面是一个不带告警分组与路由的最基本设置

global:
  resolve_timeout: 5m #持续5分钟没收到告警信息后认为问题已解决
  smtp_smarthost: 'smtp.qq.com:465'  #发件者的SMTP地址
  smtp_from: '13841276@qq.com'  #发件者邮箱
  smtp_auth_username: '13841276'  #账号
  smtp_auth_password: 'lqypcxqhfkvsbiga'  #邮箱专用授权码,不是QQ登录密码,在QQ邮箱中设置
  smtp_require_tls: false  #关闭tls授权

route:  #定义告警路由规则,可以定义多个receiver和group实现告警分组
  group_by: ['test_group']  #根据哪个标签进行分组
  group_wait: 10s  #分组等待时间,可以理解为将10秒内的相同事件作为一个分组,如果太短分组就没有意义
  receiver: 'email'  #接受者使用何种方式接收告警,这里只是定义的一个名字,并不代表一个动作

receivers:  #告警接受者配置部分
- name: 'email'  #和上面route部分中的receiver一致,这里是定义具体的动作
  email_configs:  #接收器为email,除此还有其他接收器可以使用
  - to: '13841276@qq.com'  #告警邮件发送对象
    send_resolved: true  #接收告警恢复邮件

inhibit_rules:  #告警抑制配置。当告警中node标签的值相同时,如果发生critical级别告警,则不对warning级别告警进行通知
  - 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']  #根据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  #alert选项用来定义监控项名称
    expr: node_cpu:avg_rate 5m > 4  #expr选项用来写报警表达式 
    for: 1m  #for选项定义表达式持续时长,0的话代表一满足就触发
    labels: 
      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、配置完成后在图形上就会出现一条红线,并显示了告警的阈值

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Prometheus监控系统(7)使用Alertmanager或Grafana实现告警
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-514.html  [生成短网址]

已有 0/818 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~