prometheus查询

表达式的结果可以显示为图形,可以显示为表格,也可以通过HTTP API供外部系统调用。

 

1、数据类型

Instant vector:瞬时矢量,一组时间序列,包含每个时间序列的单个样本,所有样本共享相同的时间戳

 

Range vector:范围矢量,一组时间序列,包含每个时间序列随时间变化的一系列数据点

 

 

Scalar:标量,一个浮点值。

String:字符串,当前未使用。

 

当前只有瞬时矢量可以直接画图,也就是说一个表达式的结果必须是瞬时向量,才能够直接绘制图形。

 

2、字面量

字符串字面量:

浮点数字面量:

 

3、时间序列选择器

瞬时矢量选择器:

举例:

http_requests_total

这个选择器会挑选所有带有度量名http_requests_total的时间序列。

 

http_requests_total{job="prometheus",group="canary"}

这个选择器通过标签做进一步过滤,时间序列需要同时满足:度量名为http_requests_total,job标签的值为prometheus,group标签的值为canary

job="prometheus",其中的=表示要完全一样,才算符合要求;

job!="prometheus",其中的!=表示不相等,才算符合要求;

job=~"prometheus",=~表示需要正则匹配。

job!~"prometheus",!~表示不能正则匹配。

 


http_requests_total{environment=~"staging|testing|development",method!="GET"}

本例中,staging,testing,development,都符合要求,同时排除了GET方法,其他方法都符合要求。

 

 

 非法,因为能匹配到空字符串。

 

 

合法,因为第一个是.+,至少会有1个字符;第二个虽然用了.*,但是第二个method作为保底标签,即使job=""也不怕。

 

注意:表达式http_requests_total 等价于 表达式{__name__="http_requests_total"}

 

 

该表达式会选择那些  度量名以job开头。

或者说,一个度量名的开头如果是job,则符合该表达式的要求。

 

度量名不能是以下关键字中的一个:

bool, on, ignoring, group_left and group_right

 

on{}  这是非法的

 

可以换一种方式:{__name__="on"}

 

范围矢量选择器

 

在过去的5分钟内,如果某些时间序列的度量名是http_requests_total,job标签的值是prometheus,那么这些时间序列就符合上述表达式。

此时,我们就选择到了过去这5分钟内的值。

 

持续时间

 

 

时间能组合

 

以下是合法的示例

 

 

偏移修改器

偏移修改器允许修改查询中 某个独立的瞬时矢量或范围矢量 的时间偏移量。

注意,offset必须紧跟着选择器。

以下这个是错误的,因为offset没有紧跟着选择器,而是跟在sum()的后面:

 

 

 

对于范围矢量,同样适用:

 

首选划定前5分钟内的数据范围,然后往前偏移1周。最后再计算相应5分钟内的速率。

比如现在是2021-11-18 18:10:00[5m]的作用是将 2021-11-18 18:05:00 ~ 2021-11-18 18:10:00范围内的数据圈起来。

offset 1w,表示向前推移1周,即2021-11-11 18:10:00,[5m]的作用是锁定 2021-11-11 18:05:00 ~ 2021-11-11 18:10:00范围内的数据,

并计算速率。

 

 

向前偏移。用-表示。比如现在是2021-11-18 18:10:00,推移后是2021-11-25 18:10:00

这个特性需要单独开启(在启动prometheus的时候增加选项)

./prometheus --enable-feature=promql-negative-offset

 

@ 修改器

用于指定获取某个具体时间点的值

 

返回http_requests_total2021-01-04T07:40:00+00:00时间点的值。

@符号后面跟时间戳。

 

同样的,@符号也要紧跟着选择器。

 

同样的,范围选择器也是一样:

 

在2021-01-04T07:40:00+00:00时间点,计算前5分钟的速率。

 

 

offset和@组合使用。

 

不管先写@还是先写offset,偏移都是相对于@符号来说的

也就是说先定位到@符号指定的时间上,再做偏移动作

 

@默认是关闭的,如果要开启,则添加选项:

./prometheus --enable-feature=promql-at-modifier

 

 

在@符号后,可以使用start()和end()。

对于一个即时查询来说,start()和end()都解析为计算时间

 

子查询的结果是范围向量。

posted @ 2021-11-18 20:08  道霖  阅读(1623)  评论(0编辑  收藏  举报