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
查询为例:
如果我们想统计总共返回了多少条数据,可以使用count查询:
如果想计算所有cpu时间之和, 可以使用sum表达式:
sum(node_cpu_seconds_total)
如果我们对每个mode感兴趣, 并统计对应的CPU时间和,可以使用by查询:
sum(node_cpu_seconds_total) by (mode)
在上面查询的基础上,我们想统计前3大和前3小的结果:
bottomk(3, sum(node_cpu_seconds_total) by (mode))
topk(3, sum(node_cpu_seconds_total) by (mode))