Prometheus 提供了其它大量的查询函数,可以对时序数据进行丰富的处理。对应的官方地址:https://prometheus.io/docs/prometheus/latest/querying/functions/。以下内容是我列举的常用函数及示例:

abs()

绝对值。

absent()

如果传参的查询无结果,则输出为1;否则输出为No data。当监控度量指标时,如果获取到的样本数据是空的, 使用 absent 方法对告警是非常有用的。

四舍五入

ceil()

将返回结果向上取整。

2.79 -> 3

floor()

与 ceil() 相反,将返回结果向下取整。

2.79 -> 2

round()

四舍五入。默认取整,第二个参数当为1时,则取整;当为0.001时,则四舍五入保留3位小数。

如果处理的值不满足保留的小数位的话,不会补0。

如果保留的小数过多,比如0.00001,有时会返回:0.06856000000000001。如果保留的小数过多,建议还是程序处理。

label标签处理

label_join()

label_replace()

数值上下限

使用 clamp_min() 和 clamp_max() 相当于给数据设置了上下限。

clamp_min()

输入一个瞬时向量和最小值,样本数据值若小于 min,则改为 min,否则不变。

这个可以用于:Pod CPU使用

clamp_max()

输入一个瞬时向量和最大值,样本数据值若大于 max,则改为 max,否则不变。

排序

sort()

正序排序

sort_desc()

倒序排序

topk(n, xxx)

排序并取前n条数据。

bottomk(n, xxx)

排序并取后n条数据。

增长

increase、rate、irate 都适用于counter数据类型的函数,反应了某时间区间的增长或平均值。

increase()

获取区间向量中的第一个和最后一个样本并返回其增长量。

1 - avg(increase(node_cpu_seconds_total{mode="idle",job="node-exporter",Hostname="master-1"}[3m]))by(InternalIP,Hostname)/180

rate()

平均增长率,取指定时间范围内所有数据点,算出一组速率,然后取平均值作为结果。

1-avg(rate(node_cpu_seconds_total{mode="idle",job="node-exporter",Hostname="master-1"}[3m]))by(InternalIP,Hostname)

irate()

即时增长率,某段时间内最后两个数据点,除以两数据点的时间戳差值。

1-avg(irate(node_cpu_seconds_total{mode="idle",job="node-exporter",Hostname="master-1"}[3m]))by(InternalIP,Hostname)