hualinux 进阶 prom 1-2.6:PromQL(二)聚合操作

目录

​​一、聚合操作语法​​

​​二、聚合操作符表​​


前篇​对PromQL做了介绍,讲了数据模型、2种选择器,本章继续讲PromQL相关知识,主要是聚合操作​​Aggregation operators​​

一、聚合操作语法

Prometheus为使用者提供了内置的聚合操作符,这些聚合操作符仅仅适用于对单个即时向量进行聚合操作。它们可以将即时向量聚合后生成一个包含较少元素的新的时间序列。首先,我们看一下聚合操作​​Aggregation operators​​的语法信息:

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

或:

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

语法中的without关键字可以把列出的标签从计算结果中删除,而其他未被列出的标签被保留输出;by关键字正好与without执行的操作相反,是将列出的标签保存在结果向量中,删除其余未在by子句中列出的标签。

例如,如果监控指标名称http_requests_total包含由application、instance和group的标签组成的时间序列数据,则可以通过sum操作符进行如下计算,去除instance标签的http请求总数:sum(http_requests_total)without(instance),相当于

sum(http_requests_total) by (application, group)

当然,如果只是需要计算所有应用程序的HTTP请求总量,可以简单地直接写表达式:
sum(http_requests_total)。

二、聚合操作符表

名称

描述

sum

求和,是最常见的聚合操作符,将组中的所有值相加,并将其作为组的值返回

max

最大值,将组内的最大值作为组的值返回。例如,返回每个实例上最大的文件系统的大小:
max without( device, fstype, mountpoint)(node_ filesystem_ size_ bytes)
在Prometheus Web UI中调试输出信息:
{instance="192.168.3.22:9100", job="node_ discovery"} 81247748096
{instance=" 192.168.3.I1:9100", job="push_ node_ exporter" } 158983974912
{instance= "192.168.3.21:9100", job="node_ exporter"} 158983974912

min

最小值,与最大值规则相同.

avg

平均值,返回组中时间序列值的平均值作为组的值。

例如,计算每个CPU每分钟的空闲时间,然后对主机上的所有CPU求平均值:
avg without(cpu, mode) (rate(node_ cpu_ seconds_ _total {mode ="idle"} [1m]))
调试输出信息:
{instance= =" 192.168.3.17:9100", job="node_ exporter"} 0.7801836805431879

stddve

标准差( standard deviation),对- -组数字分布情况的统计度量,用于检测异常值。例如,作业中的一个实例具有与平均值相差几个标准差的度量标准,这一现象表明它可能存在问题

stdvar

标准方差(standard variance),是标准差的平方,用于统计

count

计数,计算组中的时间序列数,并将其作为组的值返回。

例如,返回主机磁盘设备数量: count without(device)(node_ disk_ _read_ bytes_ total)。
调试输出信息:
{instance=" 192.168.3.17:9100", job="node_ exporter"} 2,可以看到主机上有两块硬盘(若虚拟机挂载光驱时,其中-一个是光驱)

count_values

对相同value进行计数,用于统计时间序列中每一-个样本值出现的次数。count_values会为每个唯一的样本值输出一个时间序列,并且每一个时间序列包含-一个额外的标签。这个标签的名字由聚合参数指定,同时这个标签值是唯-一的样本值

bottomk

用于对样本值进行排序,返回当前样本值后N位的时间序列.

topk

与bottomk操作相反,返回当前样本值前N位的时间序列。例如,获取HTTP请求数前5位的时序样本数据:

topk(5, http_ requests_total)

quantile

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

例如,当p等于0.5时,用来表示找到以下样本数据中的中位数:

quantile (0.5 http. _requests_ total)