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_total在2021-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()都解析为计算时间。
子查询的结果是范围向量。