Prometheus之告警规则的编写
2023-02-18 16:27:44 时间
Prometheus之告警规则的编写
一、前置知识
对于被Prometheus
监控的服务器,我们都有一个up
指标,可以知道该服务是否在线。
up == 0 可以任务服务下线了。
up == 1 可以任务服务在线。
二、需求
对于下线超过1分钟的服务,产生告警信息。
三、实现步骤
1、编写告警规则
groups:
- name: Test-Group-001 # 组的名字,在这个文件中必须要唯一
rules:
- alert: InstanceDown # 告警的名字,在组中需要唯一
expr: up == 0 # 表达式, 执行结果为true: 表示需要告警
for: 1m # 超过多少时间才认为需要告警(即up==0需要持续的时间)
labels:
severity: warning # 定义标签
annotations:
summary: "服务 {{ $labels.instance }} 下线了"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
注意:
1、for
指定达到告警阈值之后,一致要持续多长时间,才发送告警数据。
2、labels
中可以指定自定义的标签,如果定义的标签已经存在,则会被覆盖。可以使用模板。
3、annotations
中的数据,可以使用模板,$labels表示告警数据的标签,{{$value}}表示时间序列的值。
2、修改prometheus.yml执行告警规则的位置
rule_files:
- "rules/*_rule.yaml"
表示加载 prometheus.yaml
目录上级目录下的rules目录下所有的以 _rule.yaml结尾的文件。
注意:
./promtool check config prometheus.yml
可以检测我们的配置文件是否编写正确。
3、配置文件截图
4、页面上看告警数据信息
从上图中可以告警数据,存在3个状态,Inactive
、Pending
和Firing
。
5、查询prometheus产生的告警数据
四、告警数据的状态
1、Inactive
表示没有达到告警的阈值,即expr
表达式不成立。
2、Pending
表示达到了告警的阈值,即expr
表达式成立了,但是未满足告警的持续时间,即for
的值。
3、Firing
已经达到阈值,且满足了告警的持续时间。
经测试发现,如果同一个告警数据达到了Firing
,那么不会再次产生一个告警数据,除非该告警解决了。
eg:
比如:192.168.1.1:9080 这个服务的宕机时间超过了1分钟,并且产生了一个Firing的告警数据,如果这台机器没有恢复,则不会再次产生相同的告警数据。
五、参考文档
1、https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
相关文章
- [日常] nginx与location规则
- [日常] nginx反代websocket
- [日常] nginx与HTTP cache
- [日常] nginx访问频率限制
- [日常] nginx与负载均衡
- [HTTP]HTTP/1.1 协议Expect: 100-continue
- [日常] 研究redis未授权访问漏洞利用过程
- [MySQL]mysql binlog回滚数据
- [日常] CentOS安装最新版redis设置远程连接密码
- [PHP]PHP中申明 declare(strict_types=1)的作用
- [日常] Apache Order Deny,Allow的用法
- [日常] 读取队列并循环发信的脚本
- [日常] 20号日常工作总结
- [日常] SinaMail项目和技术能力总结
- [日常] MySQL的预处理技术测试
- [日常] MySQL内存不足启动失败的解决方法
- [日常] 正则表达式模式修正符简单测试
- [日常] MySQL的哈希索引和原理研究测试
- [日常] crontab的秒执行和串行化和多进程实现
- [日常] 编写HTTP接口文档