下面将介绍常用的 Prometheus 内置函数:
求瞬时向量绝对值,例如:
传入一个瞬时非空向量,则返回空向量,否则返回不带名称值为1的指标,用来监控空数据的情况。例如:
将 v 中所有元素的样本值向上四舍五入到最接近的整数。例如:
该函数与 ceil() 函数相反,舍弃小数部分取整。例如:
输入一个区间向量, 返回这个区间向量内每个样本数据值变化的次数,结果为瞬时向量。例如:
注意: 如果样本数据值没有发生变化,则返回结果为1。
瞬时向量值如果大于max 则值修改为max,否则值不变(用于将向量规范到一个不大于max的区间内),例如:
同理,将向量规范到一个不小于min值的范围内,输入一个瞬时向量和最小值,样本数据值若小于 min,则改为 min,否则不变。例如:
delta 函数的参数是一个区间向量,返回一个瞬时向量。用来计算一个区间向量 v 的第一个元素和最后一个元素之间的差值。例如:
注意:由于这个值被外推到指定的整个时间范围,所以即使样本值都是整数,你仍然可能会得到一个非整数值。
idelta 函数的参数是一个区间向量, 返回一个瞬时向量。用来计算最新的 2 个样本值之间的差值。例如:
注意:当区间内仅有一个向量时无返回值。
deriv 函数的参数是一个区间向量,返回一个瞬时向量。它使用简单的线性回归计算区间向量 v 中各个时间序列的导数。例如:
exp 函数输入一个瞬时向量,返回各个样本值的 e 的指数值,即 e 的 N 次方。当得到一个无穷大的值,显示 +Inf, 反之显示 0,e 的负数次方无限趋进 0,e 的空向量指数依然为空向量。
year 函数返回被给定 UTC 时间的当前年份。
函数返回给定 UTC 时间当前属于第几个月,结果范围:0~12。
函数返回被给定 UTC 时间的当前第几个小时,时间范围:0~23。
函数返回给定 UTC 时间当前小时的第多少分钟。结果范围:0~59。
从给定的时间戳中提取月份的某一天(即一个月中的第几天)返回值范围 1~31,例如:
返回给定 UTC 时间所在周的第几天,返回值范围 0~6,0 表示星期天。例如:
返回当月一共有多少天,返回值范围:28~31。例如:
increase 函数获取区间向量中的第一个和最后一个样本并返回其增长量,它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。
由于这个值被外推到指定的整个时间范围,所以即使样本值都是整数,你仍然可能会得到一个非整数值,如果除以一定时间就可以获取该时间内的平均增长率。
例如:
rate 函数可以直接计算区间向量 v 在时间窗口内平均每秒增长速率,它会在单调性发生变化时 (如由于采样目标重启引起的计数器复位) 自动中断。
该函数配合 counter 数据类型使用,它的返回值类型只能用计数器,在长期趋势分析或者告警中推荐使用这个函数。该函数的返回结果不带有度量指标,只有标签列表。
例如:
注意:当将 rate() 函数与聚合运算符(例如 sum())或随时间聚合的函数(任何以 _over_time 结尾的函数)一起使用时,必须先执行 rate 函数,然后再进行聚合操作,否则当采样目标重新启动时 rate() 无法检测到计数器是否被重置。
irate 函数用于计算区间向量的增长率,但是其反应出的是瞬时增长率。irate 函数是通过区间向量中最后两个样本数据来计算区间向量的增长速率,它会在单调性发生变化时 (如由于采样目标重启引起的计数器复位) 自动中断。这种方式可以避免在时间窗口范围内的“长尾问题”,并且体现出更好的灵敏度,通过irate函数绘制的图标能够更好的反应样本数据的瞬时变化状态。
例如:
注意:当将 irate() 函数与聚合运算符(例如 sum())或随时间聚合的函数(任何以 _over_time 结尾的函数)一起使用时,必须先执行 irate 函数,然后再进行聚合操作,否则当采样目标重新启动时 irate() 无法检测到计数器是否被重置。
label_join 函数可以将时间序列 v 中多个标签 src_label 的值,通过 separator 作为连接符写入到一个新的标签 dst_label 中。可以有多个 src_label 标签。
存在如下向量:
up{name="a", job="b"} 1 up{name="a", job="b"} 0
将两个向量进行:
label_join(up{name="a", job="b"}, "full_name", "-", "name", "job")
将会得到一个带有新 label 的向量:
up{name="a", job="b", full_name="a-b"} 1
例如:
label_replace 函数允许将指定标签中的内容通过正则表达式提取出来创建一个新的标签。
例如:下面示例将 instance 标签中的端口 9090 提取出来生成一个新的 port 标签。
注意,label_replace 函数不会修改原始时间序列或标签,而是返回一个新的即时向量,其中包含了修改后的标签和时间序列数据。
In 函数用来计算瞬时向量 v 中所有样本数据的自然对数。注意:
ln(0) = -lnf 负无穷
ln(lnf) = lnf
ln(负数) = Nan
ln(Nan) = Nan
log2 函数用来计算瞬时向量 v 中所有样本数据的二进制对数,特殊情况同 ln。
log10 函数用来计算瞬时向量 v 中所有样本数据的十进制对数,特殊情况同 ln。
predict_linear 函数可以预测时间序列 v 在 t 秒后的值。它基于简单线性回归的方式,对时间窗口内的样本数据进行统计,从而可以对时间序列的变化趋势做出预测。
例如:下面查询将根据 prometheus_http_requests_total 过去 5 分钟的样本数据统计分析,预测未来 10 秒钟的数据。
resets 函数的参数是一个区间向量。对于每个时间序列,它都返回一个计数器重置的次数。两个连续样本之间单调性发生变化被认为是一次计数器重置。
round 函数与 ceil 和 floor 函数类似,返回向量中所有样本值的最接近 to_nearest 值整数倍的值,当to_nearest=1 时等价于 ceil。
例如:将 prometheus_http_requests_total 指标中,标签 handler 以 /api/v1/ 开头的样本四舍五入为 10 的倍数。
scalar 函数返回一个单元素瞬时向量的样本值,当多元素或者没有元素返回 Nan。例如:
vector 函数将标量 s 作为没有标签的向量返回(和scalar作用刚好相反)。例如:
sort 函数对向量按元素的值进行升序排序。例如:
sort_desc 函数对向量按元素的值进行降序排序。例如:
sqrt 函数计算向量 v 中所有元素的平方根。
timestamp 函数返回向量 v 中的每个样本的时间戳(从 1970-01-01 到现在的秒数)。
avg_over_time 函数计算区间向量内每个度量指标的平均值。例如:
min_over_time 函数计算区间向量内每个度量指标的最小值。
max_over_time 函数计算区间向量内每个度量指标的最大值。
sum_over_time 函数计算区间向量内每个度量指标的求和。
count_over_time 函数计算区间向量内每个度量指标的样本数据个数。