【功能与技巧】promethues通过记录规则持久化查询,存储rules表达式查询结果为采集指标

发布时间 2023-04-03 19:19:43作者: 郭大侠1

一、查询持续性

到目前为止,我们只是在表达式浏览器中运行查询。虽然查看该查询的输出很方便,但结果仍然是临时存储在Prometheus服务器上,我们可以通过以下三种方式使查询持久化:
 
* 记录规则:根据查询创建新指标
* 报警规则:从查询生成警报
* 可视化:使用Grafana等仪表板可视化查询
  记录规则存储在Prometheus服务器上,位于Prometheus服务器加载的文件中。
       规则是自动计算的,频率则由 prometheus.yml 配置文件的 global 块中的 evaluation_interval 参数控制
  规则文件在 Prometheus 配置文件的 rules_files 块中指定。

二、示例

基本案例

[root@node1 rules]# cat node1_rules.yml
groups:
- name: node1_rules
  rules:
  - record: instance:node_cpu:avg_rate1m   #其实就是把下面表达式的值存储起来了,并且另存为指标: instance:node_cpu:avg_rate1m,后面可以直接用该指标查询结果
expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)*100 labels: metric_type: aggregation

 

在prometheus.yml文件的同一文件夹中创建一个 名为rules的子文件夹,用于保存我们的记录规则,并且为节点指标创建一个名为node1_rules.yml的文件。
复制代码
[root@node1 opt]# cd /opt/prometheus/
[root@node1 prometheus]# mkdir rules
[root@node1 prometheus]# cd rules/
[root@node1 rules]# vim node1_rules.yml
[root@node1 rules]# cat node1_rules.yml
groups:
- name: node1_rules
  rules:
  - record: instance:node_cpu:avg_rate1m
    expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)*100
    labels:
      metric_type: aggregation
 
[root@node1 prometheus]# vim prometheus.yml  # 修改prometheus.yml,添加配置
rule_files:
   - "rules/node1_rules.yml"
 
[root@node1 prometheus]# docker container rm -f  prometheus-server  #由于之前是挂载的prometheus.yml,所以重新启动一下prometheus-server,把rules挂到容器里。
[root@node1 prometheus]#  docker run --name prometheus-server -d -p 9090:9090 -v /opt/prometheus/:/etc/prometheus/ prom/prometheus
复制代码
浏览器访问该地址,可以查看到我们手动添加的rules:http://192.168.42.133:9090/rules
  
-----
  
 
 

【3】案例:5分钟内出现过3次CPU超90%则报警

(3.1)需求描述

   比如 1.1分触发一次,1.2分处于80%,1.3分 触发了2次CPU大于90%

(3.2)解决思路

1、使用 rules 文件中的 record,把每一次的(15S间隔)表达式值存储成另外一个指标,如 node_exporter:cpu:90
2、使用 count_over_time,统计5分钟内出现的次数
  

 

3、 使用 node_exporter:cpu:90  指标构建新的 rules 规则,表达式  count_over_time(node_exporter:cpu:90) >3 ,即可

其他相关参数

  

 

 该参数 evaluation_interval  是去 rules 里面运行表达式的值

 
 
 【参考文档】
一、二 转自:https://www.cnblogs.com/cmxu/p/12270852.html