Prometheus的查询语言PromQL
📅 2017-06-02 | 🖱️
PromQL是Prometheus提供的查询语言,用户可以使用PromQL对时序数据进行查询和聚合。 PromQL的查询结果可以用来在PromQL的浏览器中绘图、以表格展现数据,另外,PromQL的HTTP API也可以被外部系统使用。
Prometheus’s Expression Browser #
Prometheus的-web.listen-address=
监听的就是PromQL浏览器的地址,例如: -web.listen-address=:9090
,就以http://serverip:9090/graph
访问PromQL浏览器。
例如我们可以输入http_requests_total{job="apiserver", handler="/api/comments"}
这样的表达式进行查询。
PromQL表达式语言的数据类型 #
目前PromQL Expression Language有4种数据类型:
- Instant vector(即时向量): 包含单个样本的一组时间序列,每个时间序列共享相同的时间戳
- Range vector(范围向量): 一组每个时间序列随时间变化的数据点的时间序列
- Scalar(标量): 一个简单的浮点数值
- String(字符串): 一个简单的字符串值,当前还没有使用
字面值 #
字符串 #
在PromQL中字符串作为查询条件label的值,如http_requests_total{job="apiserver", handler="/api/comments"}
中的"apiserver"
和"/api/comments"
,和Go语言中字符串的类似,例如:
1"this is a string"
2'these are unescaped: \n \\ \t'
3`these are not unescaped: \n ' " \t`
浮点值 #
标量浮点数值格式为[-](digits)[.(digits)]
,例如:
1-2.43
时序选择器 #
即时向量选择器 #
即时向量选择器用来使用metric name和label来从当前时刻返回满足条件的时间序列。
最简单的形式是只使用一个metric name,例如http_requests_total
,还可以通过附件一组用{}括起来的label进一步的筛选时间序列,如
http_requests_total{job="prometheus",group="canary"}
。label的匹配支持以下形式:
=
选择相等的标签!=
选择不相等的标签=~
选择匹配正则表达式的标签(或子标签)!~
选择不匹配正则表达式的标签(或子标签)
例如,查询staging、testing、development环境下的,非GET方法的http_requests_total
的时间序列:
1http_requests_total{environment=~"staging|testing|development",method!="GET"}
范围向量选择器 #
在一个向量选择器后天就[]
表示的时间范围,就是范围向量选择器。时间范围的单位可以取值如下:
s
- secondsm
- minutesh
- hoursd
- daysw
- weeksy
- years
例如:
1http_requests_total{job="prometheus"}[5m]
Offset modifier #
Offset modifier即偏移修饰符可以用来指定即时向量或范围向量的时间偏移,例如:
1http_requests_total offset 5m
2
3http_requests_total[5m] offset 1w
4
5sum(http_requests_total{method="GET"} offset 5m)
6
7rate(http_requests_total[5m] offset 1w)
其中如http_requests_total offset 5m
表示返回当前五分钟之前http_requests_total
的数据。
操作符 #
Prometheus支持很多二元和聚合的操作符,如算数、比较、逻辑、聚合运算符,具体可以查看operators
函数 #
Prometheus支持很多函数可以用来对操作数据,具体可以查看functions。
总结 #
最后可以查看一些官方文档中的例子QUERY EXAMPLES