Prometheus 监控查询语言的类型和时间序列选择器

2019-08-25 0 By admin

Prometheus提供了一种称为PromQL(Prometheus查询语言)的功能查询语言,允许用户实时选择和汇总时间序列数据。
表达式的结果可以显示为图形,在Prometheus的表达式浏览器中显示为表格数据,或者由外部系统通过HTTP API使用。

一、表达式语言类型

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

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

根据使用情况(例如画图或者显示表达式的输出),只有某些类型是合法的,例如,即时向量表达式是可以画图的唯一类型。

二、时间序列选择器

2.1、即时向量选择

即时向量选择器允许在给定时间戳(即时)为每个选择一组时间序列和单个样本值。
在最简单的形式中,仅指定度量名称,这会生成包含具有此度量标准名称的所有时间序列的元素的即时向量。
下面这个例子选择了具有 http_requests_total 的时间序列:
http_requests_total
你可以通过附加一组标签,并用 {} 括起来,来进一步筛选这些时间序列。下面这个例子只选择有 http_requests_total 名称的、有prometheus 工作标签的、有 canary 组标签的时间序列:
http_requests_total{job="prometheus",group="canary"}
另外,也可以也可以将标签值反向匹配,或者对正则表达式匹配标签值。
下面列举匹配操作符:

  1. =:选择正好相等的字符串标签
  2. !=:选择不相等的字符串标签
  3. =~:选择匹配正则表达式的标签(或子标签)
  4. !=:选择不匹配正则表达式的标签(或子标签)

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

2.2、范围向量选择

范围向量表达式正如即时向量表达式一样运行,但是前者返回从当前时刻开始的一定时间范围的时间序列集合回来。
语法是,在一个向量表达式之后添加[]来表示时间范围,持续时间用数字表示,后接下面单元之一:

  1. s:seconds
  2. m:minutes
  3. h:hours
  4. d:days
  5. w:weeks
  6. y:years

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