数据样本
直方图类型
delta函数
运算操作
数学运算
node_disk_info / 100
当瞬时向量与标量之间进行数学运算时,数学运算符会依次作用域瞬时向量中的每一个样本值,从而得到一组新的时间序列
瞬时向量与瞬时向量之间进行数学运算
依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行运算,如果没找到匹配元素,则直接丢弃。同时新的时间序列将不会包含指标名称
布尔运算过滤时间序列
(node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes > 0.95
瞬时向量与标量进行布尔运算时,PromQL依次比较向量中的所有时间序列样本的值,如果比较结果为true则保留,反之丢弃
瞬时向量与瞬时向量直接进行布尔运算时,同样遵循默认的匹配模式:依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行相应的操作,如果没找到匹配元素,则直接丢弃
集合运算符
使用瞬时向量表达式能够获取到一个包含多个时间序列的集合,我们称为瞬时向量
左结合定律,以左边的向量结果集合为参照标准
vector1 and vector2 会产生一个由vector1的元素组成的新的向量。该向量包含vector1中完全匹配vector2中的元素组成
vector1 or vector2 会产生一个新的向量,该向量包含vector1中所有的样本数据,以及vector2中没有与vector1匹配到的样本数据
vector1 unless vector2 会产生一个新的向量,新向量中的元素由vector1中没有与vector2匹配的元素组成
向量匹配模式解析
向量与向量之间进行运算操作时会基于默认的匹配规则:依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行运算,如果没找到匹配元素,则直接丢弃
左边向量元素为基础,左右不匹配的记录全部删除
在PromQL中有两种典型的匹配模式:一对一(one-to-one) 没有用到group就是一对一匹配
多对一(many-to-one)或一对多(one-to-many)
多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况.在这种情况下,必须使用group修饰符:group_left或者group_right来确定哪一个向量具有更高的基数(充当“多”的角色)
method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m
group_left 表示左边向量多 左边的多条记录对应右边的一条记录
group_right 表示右边向量多 左边的一条记录对应右边的多条记录
聚合函数
count_values用于时间序列中每一个样本值出现的次数。count_values会为每一个唯一的样本值输出一个时间序列,并且每一个时间序列包含一个额外的标签
统计同一个value值出现的次数
分位数统计
Histogram和Summary都可以用于统计和分析数据的分布情况。区别在于Summary是直接在客户端计算了数据分布的分位数情况。而Histogram的分位数计算需要通过histogram_quantile(φ float, b instant-vector)函数进行计算。其中φ(0<φ<1)表示需要计算的分位数,如果需要计算中位数φ取值为0.5
需要注意的是通过histogram_quantile计算的分位数,并非为精确值,而是通过prometheus_http_request_duration_seconds_bucket和prometheus_http_request_duration_seconds_sum近似计算的结果
通过对Histogram类型的监控指标,用户可以轻松获取样本数据的分布情况
动态标签替换