专业的编程技术博客社区

网站首页 > 博客文章 正文

Prometheus基础查询:算数、比较、集合、聚合运算

baijin 2024-08-17 10:42:44 博客文章 8 ℃ 0 评论



基础类型

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

PromQL数据类型:

  • Instant vector - a set of time series containing a single sample for each time series, all sharing the same timestamp
  • Range vector - a set of time series containing a range of data points over time for each time series
  • Scalar - a simple numeric floating point value
  • String - a simple string value; currently unused

即时向量选择器

即时向量选择器允许在给定的时间戳(即时)选择一组时间序列和单个样本值:在最简单的形式中,只指定一个度量名称。这会产生一个即时向量,其中包含具有此度量名称的所有时间序列的元素。

此示例选择具有http_requests_total指标名称的所有时间序列:

http_requests_total

可以通过在花括号 ( {}) 中附加一个逗号分隔的标签匹配器列表来进一步过滤这些时间序列。

此示例仅选择具有http_requests_total 度量名称且job标签设置为prometheus且其 group标签设置为的时间序列canary

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

也可以否定匹配标签值,或将标签值与正则表达式匹配。存在以下标签匹配运算符:

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

正则表达式匹配完全锚定。的匹配env=~"foo"被视为env=~"^foo#34;

向量选择器必须指定一个名称或至少一个与空字符串不匹配的标签匹配器。

标签匹配器也可以通过与内部标签匹配来应用于指标名称__name__。例如,表达式http_requests_total等价于{__name__="http_requests_total"}。也可以使用=(!=,=~, )以外的匹配器。

范围向量选择器

范围向量字面量的工作方式类似于即时向量字面量,只是它们从当前时刻选择一系列样本。从语法上讲,持续时间附加在[]向量选择器末尾的方括号 ( ) 中,以指定应该为每个结果范围向量元素获取多远的时间值。

持续时间

持续时间被指定为一个数字,后跟以下单位之一:

  • ms- 毫秒
  • s- 秒
  • m- 分钟
  • h- 小时
  • d- 天 - 假设一天总是 24 小时
  • w- 周 - 假设一周总是 7 天
  • y- 年 - 假设一年总是 365d

可以通过串联来组合持续时间。必须从最长到最短订购单元。一个给定的单位在一个时间段内只能出现一次。

offset和modifier

offset是相对指定时刻向前

modifier是在指定的绝对时刻

offset和modifier可以混用,offset会相对modifier指定的时间向前

二元运算

算数运算

支持的运算:

  • + (addition)
  • - (subtraction)
  • * (multiplication)
  • / (division)
  • % (modulo)
  • ^ (power/exponentiation)

支持的类型:

运算

说明

scalar/scalar

常数之间的计算。

vector/scalar

所有样本值都与常数做一次运算,生成的指标自动丢弃name信息。

vector/vector

左右相互匹配的vector进行运算,结果只包含匹配的,不匹配的自动丢弃,同时自动丢弃name信息。

  • 算术运算会丢弃metric name
  • vector/vector遵循匹配逻辑

比较运算

比较运算在promql中默认是过滤条件,只有符合条件的指标才会在结果中输出,自动忽略不符合条件的指标

通过加入特殊的bool修改器,可以将比较运算的结果变为 0 (false) or 1 (true)

支持的运算:

  • == (equal)
  • != (not-equal)
  • > (greater-than)
  • < (less-than)
  • >= (greater-or-equal)
  • <= (less-or-equal)

支持的类型:

运算

说明

scalar/scalar

必须加入bool修改器,结果为0 (false) or 1 (true)。

vector/scalar

默认情况,只有符合比较运算的vector才能成为结果,不符合的自动丢弃;
如果使用bool修改器,不符合vector的结果变为0,符合的vector结果变为1。

vector/vector

默认情况,只有匹配且符合比较运算的vector才能成为结果,不符合的自动丢弃;
如果使用bool修改器,不符合vector的结果变为0,符合的vector结果变为1。

  • vector/vector遵循匹配逻辑

集合运算

支持的运算:

  • and (intersection)
  • or (union)
  • unless (complement)

支持的类型:instant vectors

运算

说明

vector1 and vector2

如果vector1能在vector2中找到匹配的metric则保留,否则丢弃

vector1 or vector2

保留vector1,以及vector2中与vector1不匹配的metric

vector1 unless vector2

如果vector1能在vector2中找到匹配的metric则丢弃,否则保留vector1

  • vector/vector遵循匹配逻辑
  • 不支持group_left/group_right

向量匹配

支持的运算:

  • one to one
  • many to one
  • one to many

支持的类型:instant vectors

运算

说明

one to one

默认,精确的一对一匹配

many to one

需要使用group_left,首先需要满足匹配(左侧多条匹配右侧一条),保留左侧多条数据

one to many

需要使用group_right,首先需要满足匹配(左侧一条匹配右侧多条),保留右侧多条数据bu

不允许many to many

聚合运算

支持的运算:

  • sum (calculate sum over dimensions)
  • min (select minimum over dimensions)
  • max (select maximum over dimensions)
  • avg (calculate the average over dimensions)
  • group (all values in the resulting vector are 1)
  • stddev (calculate population standard deviation over dimensions)
  • stdvar (calculate population standard variance over dimensions)
  • count (count number of elements in the vector)
  • count_values (count number of elements with the same value)
  • bottomk (smallest k elements by sample value)
  • topk (largest k elements by sample value)
  • quantile (calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表