Prometheus 常用函数详解
在编写监控查询语句时,理解内置函数的行为至关重要。PromQL 提供了丰富的工具来处理时间序列数据,从基础的数学运算到复杂的时间窗口分析。下面我结合实战经验,梳理了这些函数的使用场景和注意事项。
基础数学与标量转换
这类函数主要用于对样本值进行数值处理或类型转换。
abs(v):取绝对值。适用于需要消除负数影响的场景。ceil()/floor():向上或向下取整。常用于将浮点指标转换为整数展示。round(v, to_nearest=1):四舍五入。支持指定精度,比如to_nearest=0.5。exp(),ln(),log2(),log10(),sqrt():指数、对数和开方运算。注意特殊值(如NaN、Inf)的处理逻辑。scalar(v):将单元素向量转为标量。如果输入不是恰好一个元素,会返回NaN,适合用于条件判断。vector(s):将标量转为无标签的向量,常用于构造常量参与计算。
时间与日期提取
这些函数基于 UTC 时间,常用于按时间维度分组或过滤。
year(),month(),day_of_month(),day_of_week(),hour(),minute():分别返回年、月、日、周几、小时和分钟。默认参数为当前时间,也可传入向量。time():返回表达式求值时的 Unix 时间戳(秒)。注意它不是实时时钟,而是评估时刻的快照。timestamp(v):获取向量的采样时间戳。
范围向量分析(重点)
这是 PromQL 最强大的部分,但也是新手最容易出错的地方。务必区分 Gauge(仪表盘) 和 Counter(计数器) 的使用场景。
变化率与增量
rate(v):计算每秒平均增长率。自动处理计数器重置(reset),并外推至时间范围两端。推荐用于告警和慢速计数器。组合聚合操作时,先算rate再聚合。increase(v):计算指定时间范围内的总增量。本质是rate * 秒数,主要用于人类阅读。同样仅适用于计数器。irate(v):基于最后两个数据点计算的瞬时速率。波动大,适合快速变化的计数器绘图,但不建议用于告警,容易误报。
注意:
rate和irate只能用于 Counter。如果用 Gauge 计算,结果可能没有意义。
差值与导数
delta(v):计算范围内首尾值的差值。支持非整数结果,适用于 Gauge(如温度、内存使用率)。不要用于 Counter。

