首页 > 其他分享 >Prometheus记录规则&查询结果持久化

Prometheus记录规则&查询结果持久化

时间:2023-10-04 18:31:43浏览次数:36  
标签:node 持久 rules grafana Prometheus 规则 查询

一、查询持久化

在Prometheus的表达式浏览器进行的查询会生成新的时间序列,但其结果仅临时保存于Prometheus Server之上。在样本数据量较大、工作较为繁忙的Prometheus Server上,对于那些查询频率较高且运算较为复杂的查询而言,实时查询会存在一些响应延迟的情况。此时,记录规则和告警规则就派上用场了。

1.1 记录规则

记录规则能够预先运行频繁用到或计算消耗较大的表达式,并将其结果保存为一组新的时间序列。记录规则生成的结果也可以被告警规则使用。

  • 记录规则是定义在Prometheus配置文件中的查询语句,由Server加载后,它能够以类似批处理的方式在后台周期性的执行并记录查询结果;
  • 客户端只需查询由记录规则生成的结果序列上的样本数据即可,速度远快于实时查询;
  • 常用于跨多个时间序列生成聚合数据,或计算消耗较大的查询等场景;
  • 多见于同可视化工具(eg:Grafana)结合使用的需求中,也可用于生成可产生告警信息的时间序列。

1.2 告警规则

告警规则是定义在Prometheus配置文件中的另一种PromQL表达式,它通常是一个基于查询语句的布尔表达式,该表达式负责触发告警。当告警规则中用的查询语句较为复杂时,可将其保存为记录规则,而后通过查询该记录规则生成的时间序列来进行比较,从而避免实时查询导致的较长时间延迟。

二、配置记录规则

2.1 语法

具体参考https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#recording-rules

#每个规则文件都是含有一到多个规则组(rule_group)的列表,这些列表项定义在顶级字段groups之下
groups:
#每个规则组都要有一个名字,且在当前文件中必须唯一
- name: <string>
 #组内的规则每隔多长时间计算(评估)一次
  [ interval: <duration> | default = global.evaluation_interval ]
 #限制条件。对于告警规则,用于限制其最多生成的告警数量。对于记录规则,用于限制其最多生成的序列数量。0表示无限制
  [ limit: <int> | default = 0 ]
#该规则组中的规则列表,对于每条告警规则,要遵循规则语法
rules:
#记录规则的名称
- record: <string>
  #使用的PromQL表达式。每次评估周期到达时都会基于当前时间进行表达式计算,评估的结果会生成一个新的时间序列
  expr: <string>
  #在记录规则上添加的标签
  labels:
    [ <labelname>: <labelvalue> ]

2.2 示例

#记录规则通常保存在单独的文件中
cd /usr/local/Prometheus && mkair rules
vim rules/record-rules-node.yml
groups:
- name: custom_rules
  interval: 5s
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: (1 - avg(irate(node_cpu_seconds_total{job="node", mode="idle"}[5m])) by (instance)) * 100
  - record: instace:node_memory_MemFree_percent
    expr: 100 * (node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes
  - record: instance:root:node_filesystem_free_percent
    expr: 100 * node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}
#在prometheus.yml通过rule_files加载此文件
vim prometheus.yml
rule_files:
  - "rules/record-rules-*.yml"

#执行Prometheus热加载
curl -XPOST http://192.168.131.11:9090/-/reload

此时,刷新Prometheus Web UI的Rules界面,发现生成了新的规则。

Prometheus记录规则&查询结果持久化_记录规则

三、Grafana

3.1 简介

Grafana是一款基于go语言开发的通用可视化工具,支持从多种不同的数据源(Prometheus、ElasticSearch、Mysql、PostgreSQL等)加载并展示数据。默认监听TCP协议的3000端口,且能通过/metrics输出内建指标。

3.2 部署Grafana

参考https://mirrors.tuna.tsinghua.edu.cn/help/grafana

##在Prometheus服务器上操作
#下载 Grafana 存储库签名密钥
apt-get install -y apt-transport-https
apt-get install -y software-properties-common wget
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
#稳定版本添加存储库
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
#安装
apt -y update && apt-get -y install grafana
#启动grafana
systemctl daemon-reload
systemctl enable --now grafana-server

访问http://Grafana IP:3000,一开始默认登录用户名/密码为admin/admin,也可后续修改密码。

3.3 为Prometheus添加数据源

      进入Grafana界面,选择Connections->Data Sources,点击Add new data source,选择Prometheus

Prometheus记录规则&查询结果持久化_Prometheus_02

3.4 导入内置的Dashboard

       内置DashBoard查询地址:https://grafana.com/grafana/dashboards

       Prometheus数据源有其自带的DashBoard可直接导入。

Prometheus记录规则&查询结果持久化_记录规则_03

如果是其它中间件/组件,这里以Consul为例,搜consul关键字(最好选star指数较高、下载次数多的DashBoard模板),复制ID或json内容均可,二者选其一就行。数据源记得选之前设置的Prometheus。

Prometheus记录规则&查询结果持久化_Prometheus_04

Prometheus记录规则&查询结果持久化_Grafana_05

Prometheus记录规则&查询结果持久化_Grafana_06

Prometheus记录规则&查询结果持久化_Prometheus_07

之后点击load。效果如下(注意数据源与DashBoard模板的兼容性,如果不兼容得重找DashBoard模板):

Prometheus记录规则&查询结果持久化_Prometheus_08


标签:node,持久,rules,grafana,Prometheus,规则,查询
From: https://blog.51cto.com/u_15796303/7705605

相关文章

  • MySQL数据库多表关联查询
    本文列举数据库的多表关联查询及实际使用,以员工表和部门表作为举例:部门表:dept点击查看创建部门表sqlcreate table `dept`  (  `deptno` int(2) not null,  `dname` varchar(14),  `loc` varchar(13),  primary key (`deptno`));员工表:emp点击查看创建......
  • MySQL学习(3)B+树索引是如何快速查询的
    前言我们已经知道在磁盘中,有很多索引页,这些页并非在物理结构上相连接,而是通过双向链表关联。如果要查找一条数据,需要通过页目录中的槽,通过二分法定位到分组再进行遍历查找。比如下面这样:SELECT[查询列表]FROM表名WHERE条件; 假设表中只有一个页,在查找记录时,可以根据搜......
  • access 使用Update更新记录时,提示"操作必须使用一个可更新的查询"
    原SQL:UPDATE刀具申购明细SET刀具申购明细.关闭=-1where刀具申购明细.申购数量<=(SELECTSum(Round(Nz([入库数量],0)*1,2))AS入库合计FROM采购入库tempLEFTJOIN刀具入库明细ON采购入库temp.申购ID=刀具入库明细.采购IDGROUPBY采购入库temp.申购ID)我本......
  • 实现点赞功能-实现查询点赞状态接口
           ......
  • MySQL聚合函数及分组查询
    本文列举数据库的聚合函数及分组查询的实际使用,以员工表和部门表作为举例:部门表:dept点击查看创建部门表sqlcreate table `dept`  (  `deptno` int(2) not null,  `dname` varchar(14),  `loc` varchar(13),  primary key (`deptno`));员工表:emp点击查......
  • Mybatis - 通过中间表查询表A和表B
    中间表中间表存储了表A的id和表B的id,除此之外还存储了自身需要的字段,如创建时间、id。xml很简单,通过多个子查询获取数据就可以了,将中间表的字段传递给子查询的column,子查询获取这个参数进行where条件查询。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmappe......
  • Prometheus服务发现
    一、Prometheus为何要进行服务发现       PrometheusServer的数据抓取模型为Pull,因而,它必须事先知道各Target的位置,然后才能从相应的Exporter或Instrumentation中抓取数据。对于小型的系统环境而言,通过static_configs指定各Target即可解决问题,每个Target用一个网络端点(ip......
  • 常用的SQL语句小结(二)---普通查询,注释,聚合,分组,复杂查询
    1.普通查询(1)查询所有列SELECT* FROMProduct;(2)查询部分列(跟(1)对比,相当于可以自己确定顺序)SELECTproduct_id,product_name,product_type,sale_price,purchase_price,regist_date FROMProduct;(3)查询时设置别名,英文和中文的区别英文案例:SELECTproduct_idASid,prod......
  • springboot整合elasticsearch中的分词查询配置
    前言:elasticsearch最好还是在linux中进行集群部署,这样更符合企业需求和规范,笔者只在windows的单节点9200端口上部署,仅用于测试和学习。 什么是分词查询: 指的是将输入的文本或查询语句切分成一个个独立的词语或词项,以便更好地处理和分析,然后进行查询,比如你在百度上搜索”成都......
  • Mybatis查询报错 foreach 子查询 (invalid comparison)
    Mybatis查询报错invalidcomparison:java.lang.Stringand[Ljava.lang.String;原因去掉黄色部分<iftest="null!=businessTypeand''!=businessType">  andt.businessTypein     <foreachcollection="businessType"......