QL顾名思义,Query language即查询语言。Prometheus作为强大的开源监控系统,最大的依赖便是PromQL。是监控数据个性化查询、展示的基础。所以要掌握Prometheus,掌握PromQL是必备的前提。本文通过对PromQL表达式的基本要素和一个复杂的表达式解析,来展示PromQL强大之处。

PromQL操作对象

类比于sql的操作对应是数据库中的结构化数据,PromQL操作的对象叫做时间序列,可分为:瞬时向量、区间向量。
preometheus-console2.jpg
我们采集的数据叫time series即时间序列,对应的是每个时间点上的所有样本数据:

http_request_total{status="200", method="GET"}@1434417560939 => 94354
  ^
  │     . . . . . . . . . . . . . . . . . . .   
  │     . . . . . . . . . . . . . . . . . . .   
  │     . . . . . . . . . .   . . . . . . . .   
  │     . . . . . . . . . . . . . . . .   . .  
  v
    <------------------ 时间 ---------------->

一个样本数据包含指标名称、抓取样本的毫秒时间戳、样本值。对应于上图的某给点。
那么瞬时向量对应的是某个时间点的纵轴切面,区间向量对应的就是某个时间段的纵轴切块。
这个概念很重要,举例:1点CPU使用率10%,2点CPU使用率20%,3点CPU使用率30%
那么瞬时向量就是1点CPU使用率10%,这个采集点的所有样本数据,区间向量就是三个小时的所有样本数据。区别就是一个代表一个采集点,一个代表某个时间段的几个采集点。

PromQL操作

支持的运算基本与一门编程语言支持的操作相当:数学运算、布尔运算、集合运算。
一定要基于PromQL操作对应来理解对应运算:
1.一个瞬时向量会有很多样本,那么数学运算就是一次对比运算符两边的数据,查找对应的样本进行样本值的数学运算
2.布尔运算对应的是数据的筛选
3.集合运算对应的是样本数据的交集、并集、排序

PromQL聚合操作

PromQL的聚合函数经常用于监控数据成图中,也是展现数据最好的工具。不过可以在具体使用中,慢慢熟悉对自己有用的聚合操作。
sum (求和)
min (最小值)
max (最大值)
avg (平均值)
stddev (标准差)
stdvar (标准差异)
count (计数)
count_values (对value进行计数)
bottomk (后n条时序)
topk (前n条时序)
quantile (分布统计)

复杂PromQL解析

sum(increase(click[2m]) or (click unless click offset 80s)) by (instance)

该PromQL背景:click对应的是广告数据点击的时间序列,metric类型属于Counter。需求是每分钟click数目的点击数,按照instance进行分组。
一般选择是 sum(increase(click[2m])) by (instance)

click{app_id="com.baidu.com",campaign="122",country="USA",creative="34",instance="3a77f9f53890",job="ad",os="android"}

但是当click对应的一组标签即维度的数据,第一次采样值是10,但是对于increase函数,在计算上一分钟采集点和当前采集点的增值的时候,发现没有上一分钟的采集样本,那么increase会认为当前赠量是0。会造成监控数据非常的不可靠,因为第一个采集点的样本数据可能是10、100、1000,那么对应于最终的监控结果表现都是0。

increase(click[2m]) 这一部分将非第一采集点的瞬时向量计算出来,
click unless click offset 80s 将本采集点有,但是上一采集点没有的数据保留。
针对以上的向量进行并集。得到的结果就是本时间点真实的增量值。

文章目录