其他分享
首页 > 其他分享> > PromQL进阶

PromQL进阶

作者:互联网

Prometheus的聚合函数

一般说来,单个指标的价值不大,监控场景中往往需要联合并可视化一组指标,这种联合机制即是指“聚合”操作,例如,将计数、求和、平均值、分位数、标准差及方差等统计函数应用于时间序列的样本之上生成具有统计学意义的结果等;  对查询结果事先按照某种分类机制进行分组(groupby)并将查询结果按组进行聚合计算也是较为常见的需求,例如分组统计、分组求平均值、分组求和等;  聚合操作由聚合函数针对一组值进行计算并返回单个值或少量几值作为结果

聚合表达式

PromQL中的聚合操作语法格式可采用如下面两种格式之一  分组聚合:先分组、后聚合 事实上,各函数工作机制的不同之处也仅在于计算操作本身,PromQL对于它们的执行逻辑相似;

聚合函数

◆ sum( ):对样本值求和; ◆ avg ( ) :对样本值求平均值,这是进行指标数据分析的标准方法; ◆ count ( ) :对分组内的时间序列进行数量统计; ◆ stddev ( ) :对样本值求标准差,以帮助用户了解数据的波动大小(或称之为波动程度); ◆ stdvar ( ) :对样本值求方差,它是求取标准差过程中的中间状态; ◆ min ( ) :求取样本值中的最小者; ◆ max ( ) :求取样本值中的最大者; ◆ topk ( ) :逆序返回分组内的样本值最大的前k个时间序列及其值; ◆ bottomk ( ) :顺序返回分组内的样本值最小的前k个时间序列及其值; ◆ quantile ( ) :分位数用于评估数据的分布状态,该函数会返回分组内指定的分位数的值,即 数值落在小于等于指定的分位区间的比例; ◆ count_values ( ) :对分组内的时间序列的样本值进行数量统计;

二元运算符(Binary Operators)

PromQL支持基本的算术运算和逻辑运算,这类运算支持使用操作符连接两个操作数,因而也称为二元运算符或二元操作符; 支持的运算 将运算符用于两个即时向量间的运算时,可基于向量匹配模式(Vector Matching)定义其运算机制;

二元运算符优先级

Prometheus的复杂运算中,二元运算符存在如下给定次序中所示的由高到低的优先级 具有相同优先级的运算符满足结合律(左结合),但幂运算除外,因为它是右结合机制; 可以使用括号( )改变运算次序

向量匹配

即时向量间的运算是PromQL的特色之一;运算时,PromQL为会左侧向量中的每个元素找到匹配的元素,其匹配行为有两种基本类型

向量一对一匹配

即时向量的一对一匹配

 匹配表达式语法

左侧会生成一个即时向量,它计算出5xx响应码的各类请求的增长速率; 除了status_code标签外,该指标通常还有其它标签;于是,status_code的值为500的标签同其它标签的每个组合将代表一个时间序列,其相应的即时样本即为结果向量的一个元素; 右侧会生成一个即时向量,它计算出所有标签组合所代表的各类请求的增长速率; 计算时,PromQL会在操作符左右两侧的结果元素中找到标签完全一致的元素进行比较; 其意义为,计算出每类请求中的500响应码在该类请求中所占的比例;

向量一对多/多对一匹配

一对多/多对一匹配 “一”侧的每个元素,可与“多”侧的多个元素进行匹配; 必须使用group_left或group_right明确指定哪侧为“多”侧; 匹配表达式语法
<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>

 

 

 

标签:聚合,进阶,标签,运算符,PromQL,分组,向量,运算
来源: https://www.cnblogs.com/yanshicheng/p/15496692.html