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 - seconds
  • m - minutes
  • h - hours
  • d - days
  • w - weeks
  • y - 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

参考