聚合操作符

PromQL聚合操作

Prometheus提供了下列内置的聚合操作符,这些操作符作用于瞬时向量(Instant Vector)。可以将瞬时表达式返回的样本数据进行聚合,形成一个新的时间序列。

  • sum (求和)
  • min (最小值)
  • max (最大值)
  • avg (平均值)
  • stddev (标准差)
  • stdvar (标准方差)
  • count (计数)
  • count_values (对value进行计数)
  • bottomk (后n条时序)
  • topk (前n条时序)
  • quantile (分位数)

使用聚合操作的语法如下:

<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]

其中只有count_values, quantile, topk, bottomk支持参数(parameter)。

topk和bottomk用于对样本值进行排序,返回当前样本值前n位,或者后n位的时间序列。例如获取HTTP请求数前5位的时序样本数据,可以使用表达式:

topk(5, http_requests_total)

quantile用于计算当前样本数据值的分布情况quantile(φ, express)其中0 ≤ φ ≤ 1。

例如,当φ为0.5时,即表示找到当前样本数据中的中位数:

quantile(0.5, http_requests_total)

案例

以之前node_cpu_seconds_total查询为例:

image-20210503195159084 如果我们想统计总共返回了多少条数据,可以使用count查询:

image-20210503195830445

如果想计算所有cpu时间之和, 可以使用sum表达式:

sum(node_cpu_seconds_total)

image-20210503195334529 如果我们对每个mode感兴趣, 并统计对应的CPU时间和,可以使用by查询:

sum(node_cpu_seconds_total) by (mode)

image-20210503195502540 在上面查询的基础上,我们想统计前3大和前3小的结果:

bottomk(3, sum(node_cpu_seconds_total)  by (mode))
topk(3, sum(node_cpu_seconds_total)  by (mode))

image-20210503200152700 image-20210503200214464