Prometheus告警规则操作

文档由 姚红 于 2022-06-10 01:30 创建,由 张广建 于 2023-04-19 08:16 更新
文档标签:
文档分类:
403

一、目的

根据客户环境调整Prometheus告警规则,并设置alertmanager告警频率,以满足客户特定需求。

二、操作

目前告警规则分为两种:system级别(系统级别:基础组件告警规则)和service级别(服务级别:业务告警规则),仅支持在Prometheus页面进行查看。如需对告警规则进行增删改操作,需要进入Prometheus告警规则具体目录进行操作。

2.1 告警规则路径

v4.7.2及之前的老版本
部署机:/home/wps/kubewps/webserver/prometheus/alert_rules

v5.x.x~v517-0316之间版本:
监控机:/data/kube/prometheus/webserver/prometheus/alert_rules

v517-0316及之后版本:
监控机:/data/kube/prometheus/config/alert_rules

说明:虽然v4.x.x和v5.x.x的监控路径不一样,但针对告警规则的操作是相同的。

image.png

2.2 增删改查

2.2.1 删除

示例:删除节点的【主机时间未同步】告警规则
第一步:进入监控机告警规则目录
v4.x.x版本:/home/wps/kubewps/webserver/prometheus/alert_rules/system/
v5.x.x~v517-0316之间版本:/data/kube/prometheus/webserver/prometheus/alert_rules/system/
v517-0316及之后版本:/data/kube/prometheus/config/alert_rules/
v6-2022-0628及之后版本:运维平台界面修改告警规则

编辑node_rules.yml文件,如下所示:
找到要删除的规则,直接删除保存。

image.png

第二步:使得刚才修改的告警规则生效,有以下三种方法。
第一种方法:热重启Prometheus,平滑重启,无影响,推荐。
命令:
v5.1.5版本及之前:sudo curl -XPOST http://监控机IP:9090/-/reload
v5.1.5~v517-0829之间版本:sudo curl -XPOST -k https://任意节点IP:8081/prometheus/-/reload
v517-0829及之后版本:sudo curl -XPOST -u prometheus:密码见共享文档 -k https://任意节点IP:8081/prometheus/-/reload
第二种方法:重启Prometheus服务,硬重启,会重新监控所有对象,有影响,不推荐。
命令:sudo supervisor restart prometheus:prometheus_00,监控机上执行。
第三种方法:等待Prometheus自动识别规则变化并自动更新,生效不及时。

第三步:进入Prometheus--->Status--->Rules界面,查看刚才删除的告警规则是否已删除。

2.2.2 修改

示例:修改redis的【Redis客户端连接过多】规则的告警阈值为800
第一步:进入监控机告警规则目录
v4.x.x版本:/home/wps/kubewps/webserver/prometheus/alert_rules/system/
v5.x.x~v517-0316之间版本:/data/kube/prometheus/webserver/prometheus/alert_rules/system/
v517-0316及之后版本:/data/kube/prometheus/config/alert_rules/

编辑redis_rules.yml文件,如下所示:
找到要修改的规则,直接修改对应阈值并保存,注意:要同时修改表达式后面的阈值以及详情里面对应的值。

image.png

第二步:重启Prometheus,参照删除操作中的推荐方法。
第三步:进入Prometheus--->Status--->Rules界面,查看刚才修改的告警规则是否修改成功。

2.2.3 新增

示例:新增mysql的【MySQL slave IO进程中断】告警规则
第一步:进入监控机告警规则目录
v4.x.x版本:/home/wps/kubewps/webserver/prometheus/alert_rules/system/
v5.x.x~v517-0316之间版本:/data/kube/prometheus/webserver/prometheus/alert_rules/system/
v517-0316及之后版本:/data/kube/prometheus/config/alert_rules/

编辑mysql_rules.yml文件,在rules代码块中插入新的规则字段,注意:每个规则都由alert、expr、for、labels、annotations五个字段组成,前面已经介绍过它们的含义。每条规则都是rules下面的一个列表元素,其中alert字段要以中横杠-开头,注意缩减,参考已有规则。如下所示:

image.png

第二步:重启Prometheus,参照删除操作中的推荐方法。
第三步:进入Prometheus--->Status--->Rules界面,查看刚才新增的告警规则是否已加入。

2.2.4 查看

查看告警规则有如下两种方法,如下:
第一种方法:进入Prometheus--->Status--->Rules界面查看。
image.png

第二种方法:进入Prometheus--->Alerts界面查看。
这个界面默认显示每条规则的名称,点击每个名称可展开规则的具体信息。

image.png

2.2.5 测试

如果要临时测试某一条规则是否能被正常触发告警并发出告警通知,同时能恢复并发出恢复通知,那么我们需要手动修改该规则的告警阈值。
修改告警阈值分为两种情况:

  • 阈值是非0数字,那么直接修改成最小值即可,比如连接数、利用率、次数等;
  • 阈值是0,即监控up/down状态,那么就直接停止对应监控对象,如容器、pod、进程等。

示例:测试redis告警规则【Redis客户端连接过多】,将其修改成0,默认阈值为1000
第一步:修改规则告警阈值,参考前面描述的【修改操作】部分;
默认配置

image.png
修改后的测试配置

image.png

第二步:重启Prometheus并查看阈值是否修改成功,参考前面描述的【删除操作】部分中的重启Prometheus方法,以及【查看操作】部分;
查看:如下图所示,测试规则已修改

image.png

第三步:打开Prometheus--->Alerts界面,勾选【Pending】和【Firing】,等待片刻,刷新页面,可看到redis客户端连接数告警规则开始处于【Pending】状态,当持续该规则中的for时间,该规则中的expr表达式的值为True的话,该条告警规则的状态会变为Firing状态,此时Prometheus会将此告警信息发送给alertmangaer;
说明:由于redis集群有6个容器,所以这里会看到一条告警规则有6个告警信息。

image.png
变成Firing状态了

image.png

第四步:打开alertmanager页面,查看Prometheus发送过来的告警信息,然后alertmanager会按照已配置的routes来发送告警通知。

image.png

第五步:查看是否已成功发出告警通知

v5.1.4版本及以下:
由于老版本的部署平台没有存储告警信息,需要提前配置邮箱告警方式,此时就可以查看邮箱是否收到了告警信息。

v5.1.5版本及以上:
新部署平台会存储告警信息,并在页面上进行展示,此时可登录部署平台查看告警信息是否已显示。

image.png

第六步:将测试告警规则阈值调整回默认值1000,热重启Prometheus后查看值是否修改正常;

image.png

第七步:打开Prometheus--->Alerts界面,等待片刻,观察处于【Firing】状态的测试规则是否消失;

image.png

第八步:打开alertmanager页面,查看测试的告警信息是否消失;

image.png

第九步:确认是否收到告警信息的恢复通知。
v5.1.4版本及以下:
由于老版本的部署平台没有存储告警信息,需要提前配置邮箱告警方式,此时就可以查看邮箱是否收到了恢复通知。

v5.1.5版本及以上:
新部署平台会存储告警信息,并在页面上进行展示,此时可登录部署平台查看恢复信息是否已显示。

image.png

2.3 alertmanager告警频率修改

有时在测试环境或客户环境中,需要修改alertmanager告警发送频率,来应对不同需求。此时可以修改alertmanager默认的告警发送频率。
v4.x.x及之前的老版本
修改文件路径:/home/wps/kubewps/webserver/alertmanager/alertmanager.yml

v5.x.x~v517-0316之间版本:
修改文件路径:/data/kube/prometheus/webserver/alertmanager/alertmanager.yml

v517-0316及之后版本:
修改文件路径:/data/kube/alertmanager/config/alertmanager.yml

说明:虽然v4.x.x和v5.x.x的alertmanager路径不一样,但操作是相同的。

image.png
字段解释:

  • resolve_timeout:定义了当AlertManager持续多长时间未接收到告警后标记告警状态为resolved,该参数的定义可能会影响到告警恢复通知的接收时间。默认为5M。
  • group_interval:用于定义相同的Gourp之间发送告警通知的时间间隔,即:对于已经发送过通知的告警组 --如果有新的alert加入该告警组 --则该告警组需要等待group_interval时间再发送通知。
  • group_wait:如果在等待时间内当前group接收到了新的告警,这些告警将会合并为一个通知向receiver发送。
  • repeat_interval:当警报已经成功发送通知, 如果想设置再次发送该告警通知之前要等待的时间,则可以通过repeat_interval参数进行设置。

以上字段,根据自身环境进行修改,修改完成后重启alertmanager服务,监控机执行命令:
sudo supervisorctl restart alertmanager:alertmanager_00
参考前面【alertmanager使用】部分,如下图所示:

image.png