失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Prometheus监控系统(7)使用Alertmanager或Grafana实现告警

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

时间:2024-06-11 13:43:21

相关推荐

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

一、Alertmanager介绍

Prometheus监控平台主要是提供了数据采集和存储功能,如果要根据事件触发告警则需要依赖Alertmanager组件来完成(或者使用GrafanaAlerting)。AlertManager支持告警分组,可以将同个分组下的多个告警告警到一封邮件中进行发送,减少骚扰;另外还有告警抑制功能,和Zabbix的告警依赖同理,避免发生某个故障出现后导致其他一系列故障一起告警形成告警风暴的问题;最后还有告警静默功能,让同时间段内的告警不重复发出。

二、安装与配置Alertmanager

在Prometheus官网下载好二进制安装包并解压,通过alertmanager.yml文件就可以进行告警分组、告警路由、告警抑制、告警静默等配置。下面是一个不带告警分组与路由的最基本配置说明:

global:resolve_timeout: 5m #持续5分钟没收到告警信息后认为问题已解决smtp_smarthost: ':465' #告警邮件发送者SMTP地址smtp_from: '13841276@' #发件者邮箱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@' #告警邮件发送对象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: 5msmtp_smarthost: ':465'smtp_from: '13841276@'smtp_auth_username: '13841276'smtp_auth_password: 'mtdvgvofyfgybzae'smtp_require_tls: falseroute: #默认路由group_by: ['instance','job'] group_wait: 30sgroup_interval: 5mrepeat_interval: 4h #重复告警间隔receiver: 'email' #默认接受者routes: #子路由,不满足子路由的都走默认路由- match: #普通匹配severity: critical receiver: leader- match_re: #正则匹配severity: ^(warning|critical)$receiver: opsreceivers: #定义三个接受者,和上面三个路由对应- name: 'email'email_configs:- to: '13841276@'- name: 'leader'email_configs:- to: '88888@'- name: 'ops'email_configs:- to: 'ops@'

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:9093rule_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 #定义了一个标签用于以后告警分组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、配置完成后在图形上就会出现一条红线,并显示了告警的阈值

如果觉得《Prometheus监控系统(7)使用Alertmanager或Grafana实现告警》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。