官方文档 https://prometheus.io/docs/prometheus/latest/querying/basics/

数据类型

目前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的时间序列:

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

范围向量选择器

在一个向量选择器后天就[]表示的时间范围,就是范围向量选择器。时间范围的单位可以取值如下:

  • s - seconds
  • m - minutes
  • h - hours
  • d - days
  • w - weeks
  • y - years

例如:

  1. http_requests_total{job="prometheus"}[5m]

Offset modifier

Offset modifier即偏移修饰符可以用来指定即时向量或范围向量的时间偏移,例如:

  1. http_requests_total offset 5m
  2. http_requests_total[5m] offset 1w
  3. sum(http_requests_total{method="GET"} offset 5m)
  4. rate(http_requests_total[5m] offset 1w)

其中如http_requests_total offset 5m表示返回当前五分钟之前http_requests_total的数据。

操作符

Prometheus支持很多二元和聚合的操作符,如算数、比较、逻辑、聚合运算符,具体可以查看operators

函数

Prometheus支持很多函数可以用来对操作数据,具体可以查看functions