一、表达式语言类型

Prometheus表达式或子表达式可以评估为一下四种类型之一:

  1. 即时向量(Instant vector)- 包含每个时间序列单个样品的一组时间序列,共享相同的时间戳
  2. 范围向量(Range vector)- 包含一个范围内数据点的一组时间序列
  3. 标量(Scalar)- 一个简单的数字浮点值
  4. 字符串(String)- 一个简单的字符串值;当前未使用

    二、即时向量选择

  5. 即时向量选择器允许选择一组时间序列,或者某个给定的时间戳的样本数据。

  • 选择具有http_requests_total的时间序列:

prometheus_http_requests_total
等同于:
prometheus_http_requests_total{}

  1. PromQL还支持用户根据时间序列的标签匹配模式来对时间序列进行过滤,
  • PromQL支持使用=和!=两种完全匹配模式:

=:选择正好相等的字符串标签
!=:选择不相等的字符串标签

  • 选择有http_requests_total名称的、有prometheus工作标签的、code为200标签的时间序列:

prometheus_http_requests_total{job="prometheus",code="200"}

  1. PromQL还支持使用正则表达式作为匹配条件,多个表达式之间使用|进行分离:

=~:选择匹配正则表达式的标签(或子标签)
!=:选择不匹配正则表达式的标签(或子标签)

  • 选择staging、testing、development环境下的,GET之外的HTTP方法的http_requests_total的时间序列:http_requests_total{environment=~"staging|testing|development",method!="GET"}

    三、范围向量选择

  1. 范围向量表达式返回从当前时刻开始的一定时间范围的时间序列集合回来。
  2. 语法是,在一个向量表达式之后添加[]来表示时间范围,持续时间用数字表示,后接下面单元之一:
  • s:seconds
  • m:minutes
  • h:hours
  • d:days
  • w:weeks
  • y:years

选择最后5分钟的记录,metric名称为http_requests_total、作业标签为prometheus的时间序列的所有值:
http_requests_total{job="prometheus"}[5m]

四、时间位移操作

  1. 如果我们想查询5分钟前的瞬时样本数据,或昨天一天的区间内的样本数据时,可以使用位移操作,位移操作的关键字为offset。
  2. 可以使用offset时间位移操作:
  • http_request_total{} offset 5m
  • http_request_total{}[1d] offset 1d