PromQL(一)

Prometheus 提供了一种称为 PromQL(Prometheus 查询语言)的功能性查询语言,允许用户实时选择和聚合时间序列数据。

表达式语言数据类型

表达式的结果可以为以下4种结果之一:

  • Instant vector 一组时间序列,其中包含每个时间序列的单个样本,所有时间序列都共享相同的时间戳
  • Range vector - 一组时间序列,其中包含每个时间序列随时间变化的数据点范围
  • Scalar - 一个简单的数字浮点值
  • String - 一个简单的字符串值;当前未使用

时间序列选择器

Instant vector selectors

即时向量选择器允许在给定时间戳(时间点)选择一组时间序列和每个时间序列的单个样本值。
以下是最简单的瞬时矢量选择器,此示例选择具有 http_requests_total 指标名称的所有时间序列,并返回每个时间序列的最新样本:

http_requests_total

可以通过以下形式过滤指标数据,通过标签job和group过滤:

http_requests_total{job="prometheus",group="canary"}

标签匹配运算符:

  • = 选择与提供的字符串完全相等的标签。
  • != 选择与字符串不想等的标签
  • =~ 通过正则表达式匹配标签
  • !~ 选择不匹配正则表达式的标签

与空标签值匹配的标签匹配器还会选择根本没有设置特定标签的所有时间序列。同一标签名称可以有多个匹配器。
例如,给定数据集:

http_requests_total
http_requests_total{replica="rep-a"}
http_requests_total{replica="rep-b"}
http_requests_total{environment="development"}

http_requests_total{environment=""}匹配并返回:

http_requests_total
http_requests_total{replica="rep-a"}
http_requests_total{replica="rep-b"}

多个匹配器可用于相同的标签名称;它们都必须通过才能返回结果。

标签匹配器也可以通过与内部 __name__标签。例如,表达式 http_requests_total 等效于 {name="http_requests_total"} 。也可以使用 =、!=、=、!操作符。

Range Vector Selectors

该选择器返回指标的指定范围内的数据

以下示例返回了指标名http_requests_total,且job标签为prometheus,时间为5分钟前以内的时间序列数据

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

Offset修饰符

offset 修饰符允许更改查询中单个 instant 和 range 向量的时间偏移量。

以下示例返回5分钟前的数据

http_requests_total offset 5m

@修饰符

@ 修饰符允许更改查询中单个 instant 和 range 向量的求值时间。提供给 @ 修饰符的时间是 unix 时间戳,并使用 float 文字进行描述。
例如:

http_requests_total @ 1609746000
posted @ 2025-03-11 23:48  Hekk丶  阅读(43)  评论(0)    收藏  举报