首页 > 其他分享 >PromQL的一些整理

PromQL的一些整理

时间:2023-04-06 19:02:51浏览次数:45  
标签:http 查询 PromQL command 整理 一些 requests total

PromQL简介
PromQL(Prometheus Query Language)是Prometheus 提供的函数式查询语言,可以查询实时数据和聚合时间序列的数据。在数据可视化和编写告警规则中使用。

PromQL的表达式类型
瞬时向量(Instant-Vector) - 一组时间序列,包含相同时间戳的单个样本;

例如:http_requests_total

可以通过向 {} 里附加一组标签来进一步过滤:http_requests_total{group="res"}

完全匹配和正则匹配

= : 选择与提供的字符串完全相同的标签。
!= : 选择与提供的字符串不相同的标签。
=~ : 选择正则表达式与提供的字符串(或子字符串)相匹配的标签。
!~ : 选择正则表达式与提供的字符串(或子字符串)不匹配的标签
区间向量(Range-Vector) - 一组时间序列,包含每个时间序列随时间变化的数据点范围,例如:http_requests_total[5m]在过去5分钟内指标名称为http_requests_total的所有时序

s - 秒
m - 分钟
h - 小时
d - 天
w - 周
y - 年
标量(Scalar) - 一个简单的数字浮点值,例如:count(http_requests_total)

字符串(String) - 一个简单的字符串值;

时间位移操作:在瞬时向量表达式和区间向量表达式中,都是以时间为基准的:

使用offset 可以查询前一段时间的数据
如:rate(http_requests_total[5m] offset 1w)
Prometheus的指标类型
Prometheus有四个指标类型

Counter:计数器,单调递增;
Gauge:仪表盘,可增可减的数据;
Histogram:直方图,将时间范围内的数据划分成不同的时间段,并各自评估其样本个数及样本值之和,因而可计算出分位数;
可用于分析因异常值而引起的平均值过大的问题;

分位数计算要使用专用的histogram_quantile函数;

Summary:类似于Histogram,但客户端会直接计算并上报分位数;
Counter 计数器

Counter是累计值需要借助于rate、irate、topk和increase等函数来生成样本数据的变化状况(增长率);

rate

它主要用于计算时间范围内某指标的速率

rate(v range-vector)计算范围向量中时间序列的每秒平均增长率

rate(http_requests_total[2h])
irate

作用与rate函数一致,但它计算的点不会使用时间窗口所有的点。而是直接使用最后两个点。

irate(v range-vector)计算范围向量中时间序列的每秒增加率。这是基于最后两个数据点

irate(http_requests_total[2h])
rate与irate对比

irate适合快速变化的计数器(counter)

rate适合缓慢变化的计数器(counter)

increase

表示一个时间窗口的变化值

resets

用于计算一个时间窗口被重置的次数,采样值有减小就加一

topk

topk(k, Instant vector) 获取样本值最大的 k 个元素

获取该指标下http请求总数排名前3的时间序列;

topk(3, http_requests_total)
Gauge 仪表盘

Gauge用于存储其值可增可减指标的样本数据,通常用于进行求和、平均值、最小值、最大值等聚合计算;也会结合PromQL的predict_linear和delta函数使用;

predict_linear(v range-vector, t scalar) 函数可以预测范围向量v在t秒后的值,它通过线性回归的方式来预测样本数据的Gauge变化趋势;

predict_linear(mysql_up[5m],10)
delta(v range-vector) 函数计算范围向量中每个时间序列元素的第一个值与最后一个值之差,从而展示不同时间点上的样本值的差值;

delta(http_requests_total[5m])
PromQL查询例子
Prometheus 存储的是时序数据,它的时序是由指标名称和标签组成。

一个简单的查询相当于是对各种标签的筛选,例如:

mysql_global_status_commands_total{instance="10.83.10.21",command="select"} # 表示查询名字为 mysql_global_status_commands_total,command 为 "select" 的数据

mysql_global_status_commands_total{instance="10.83.10.21",command!="select"} # 表示查询 command 不为 "select" 的数据
查询条件支持正则匹配,例如:

mysql_global_status_commands_total{instance="10.83.10.21",command=~"select|update|delete|insert"} # 表示查询 command 为 "select|update|delete|insert" 的数据

mysql_global_status_commands_total{instance="10.83.10.21",command=~"se.*"} # 表示查询 command 为 "se" 开头的数据

mysql_global_status_commands_total{instance="10.83.10.21",command!~"se.*"} # 表示查询 command 不为 "se" 开头的数据
PromQL计算
二元运算符
PromQL支持基本的算术运算、比较运算和逻辑运算,这类运算支持使用操作符连接两个操作数,因而也称为二元运算符。

算术运算

支持的运算符:+(加)、-(减)、*(乘)、/(除)、%(取模)和^(幂)

比较运算

支持的运算符:==(等值比较)、!=(不等)、>、<、>=和<=(小于等于)

逻辑运算

支持的运算符:and(并且)、or(或者)和unless(除了)

二元运算符优先级

下面的列表显示了 Prometheus 中二元运算符的优先级,从高到低。

^
*, /, %
+, -
==, !=, <=, <, >=,>
and, unless
or
聚合运算符
Prometheus 支持以下内置聚合运算符,可用于聚合单个即时向量的元素,从而生成具有聚合值的更少元素的新向量:

sum (计算维度的总和)
min (选择最小值)
max (选择最大值)
avg (计算维度上的平均值)
group (分组)
stddev (标准差)
stdvar (方差)
count (数量)
count_values (计算具有相同值的元素个数)
bottomk (样本值的最小 k 个元素)
topk (样本值最大的 k 个元素)
quantile (在维度上计算 φ-分位数 (0 ≤ φ ≤ 1))
PromQL与 SQL 对比
下面以 Prometheus 收集的 http_requests_total 指标数据为例子来对比。

基本查询对比
查询当前所有数据
// PromQL

http_requests_total



// MySQL

SELECT * from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
条件查询
// PromQL

http_requests_total{code="200", handler="prometheus"}



// MySQL

SELECT * from http_requests_total WHERE code="200" AND handler="prometheus" AND created_at BETWEEN 1495435700 AND 1495435710;
模糊查询: code 为 2xx 的数据
// PromQL

http_requests_total{code=~"2.."}



// MySQL

SELECT * from http_requests_total WHERE code LIKE "2__" AND created_at BETWEEN 1495435700 AND 1495435710;
比较查询: value 大于 100 的数据
// PromQL

http_requests_total > 100



// MySQL

SELECT * from http_requests_total WHERE value > 100 AND created_at BETWEEN 1495435700 AND 1495435710;
范围区间查询: 过去 5 分钟数据
// PromQL

http_requests_total[5m]



// MySQL

SELECT * from http_requests_total WHERE created_at BETWEEN 1495435410 AND 1495435710;
聚合查询对比
count 查询: 统计当前记录总数
// PromQL

count(http_requests_total)



// MySQL

SELECT COUNT(*) from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
sum 查询: 统计当前数据总值
// PromQL

sum(http_requests_total)



// MySQL

SELECT SUM(value) from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
avg 查询: 统计当前数据平均值
// PromQL

avg(http_requests_total)



// MySQL

SELECT AVG(value) from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
top 查询: 查询最靠前的 3 个值
// PromQL

topk(3, http_requests_total)



// MySQL

SELECT * from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710 ORDER BY value DESC LIMIT 3;

标签:http,查询,PromQL,command,整理,一些,requests,total
From: https://www.cnblogs.com/gaoyanbing/p/17293805.html

相关文章

  • 【云原生】Prometheus 之PromQL
    前言1.PromQL的简介2.PromQL数据样本信息的含义理解2.1Prometheus数据模型2.2样本数据格式2.3PromQL的数据类型2.4时间序列选择器(TimeseriesSelectors)(1)瞬时向量选择器(InstantVectorSelectors)(2)区间向量选择器(RangeVectorSelectors)2.5偏移向量选择器2.6Pr......
  • 性能监控之常见JDK命令行工具整理
    概述我们在做性能分析的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行参数、运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等本文只讨论JDK8的常用参数及工具一、JVM参数类型JVM的参数类......
  • 胡乱总结-关于人际实验的一些思考与观测。
    分析不妨让事件有意思一点,额哈哈哈.....1.偏见的信徒与刻板印象如果我们思考一些有意思的现象,就是人际中,总会有好人、总会有坏人。当然社会规则肯定不能这么偏见的去定义一个人,所以我们合理科学的说,只能从具体的事件中去定义一个人相对于他者的行为的好与坏,所以我们不应该去人......
  • MRO采购经验的一些关键方面
    MRO采购是指涉及到维护、修理、运营等工作的物料采购,是企业经营过程中不可缺少的一部分,也是采购工作中重要的一块。MRO采购经验是企业在MRO采购过程中所积累的知识、技能、技巧、经验和教训等。企业的成功在很大程度上取决于他们的采购经验。以下是MRO采购经验的一些关键方面,以及它......
  • 关于Qt在线安装报错的一些问题解决办法
    事情的起因是,换了一台新电脑,准备安装Qt,突发现安装不了,报错,一共有几种:1.   2.第二种是不能到选择安装的界面   3.第三种是可以选择了,也可以下载安装了,但是卡在一个地方不动了以上3种个人猜测可能是某些网络原因,至于是什么网络原因,大家自行脑补。不多说废话,经过我......
  • 一些常用的Python调试工具
    pdb:Python自带的调试工具,可以在代码中添加断点并逐步执行代码,以便逐步检查代码执行的过程。ipdb:基于pdb的增强版,支持更多的交互式调试功能。PyCharm:一个常用的Python集成开发环境,可以通过图形化界面来调试程序。VisualStudioCode:另一个常用的Python集成开发环境,也可......
  • 程序员漫漫回乡路--我以前的一些想法
    职业/事业/理想去北京混5到10年,攒50万++,回璩湾,自由职业。电脑培训-软件咨询,网上找点活,开个店。去北京-武汉等城市混,做到技术总监这个级别,然后IT创业。去做零售,副食店-超市-衣服然后在璩湾或襄阳或武汉开店。架构师,技术顾问。IT培训,教学视频,技术写作。保研,混个专硕研究生......
  • 归纳整理--第4篇--常用软件
    随着软硬件设施的提高和网民网络生活的丰富,电脑上的软件越来越多。对于一个专业开发者来说,尤其如此。常用软件主要分2类。1.娱乐休闲类。普通网民使用的一些软件。即时通信:QQ,MSN浏览器:Firefox,搜狗,360音乐:酷我音乐盒,QQ音乐输入法:QQ拼音,搜狗拼音安全:q......
  • Java代码规范和一些常见问题
     本文中的代码规范,是Java标准代码规范中的一小部分,在我看来,是最重要的一部分。  理想目标:不需要写注释,不需要和别人介绍,别人就知道你的项目大致是做什么的,每个类大概实现了什么功能。一.目的   一致性、快速阅读和理解  后期维护、提高工作效率 ......
  • ES6中一些方便的数组方法和对象方法
    //一共七个方法,其实,都是带有遍历性质的方法参考https://blog.csdn.net/PeaYing/article/details/100175757......