Skip to main content

参考Prometheus官网文档:https://prometheus.io/docs/prometheus/latest/querying/functions/

数学函数

函数名称函数描述返回值
abs()返回输入向量中所有浮点样本的绝对值包含绝对值的向量
ceil()向上取整到最接近的整数向上取整后的向量
floor()向下取整到最接近的整数向下取整后的向量
round()四舍五入到最接近的整数四舍五入后的向量
exp()计算指数函数e^x指数值向量
ln()计算自然对数自然对数向量
log2()计算以2为底的对数对数向量
log10()计算以10为底的对数对数向量
sqrt()计算平方根平方根向量
sgn()返回符号:正数返回1,负数返回-1,零返回0符号向量

常用示例:

# 取绝对值
abs(temperature)

# 向上取整
ceil(cpu_usage) # 1.49 → 2.0

# 向下取整
floor(memory_usage) # 1.78 → 1.0

# 四舍五入到最接近的0.5
round(latency, 0.5)

限制函数

函数名称函数描述返回值
clamp()将值限制在指定的最小值和最大值之间限制后的向量
clamp_max()将值限制在指定的最大值以下限制后的向量
clamp_min()将值限制在指定的最小值以上限制后的向量

常用示例:

# 将CPU使用率限制在0-100之间
clamp(cpu_usage, 0, 100)

# 将内存使用限制在1024以下
clamp_max(memory_usage_bytes, 1024*1024*1024)

# 确保磁盘使用率不为负数
clamp_min(disk_usage, 0)

时间和日期函数

函数名称函数描述返回值
time()返回自1970年1月1日UTC以来的秒数当前时间戳(秒)
timestamp()返回向量中每个样本的时间戳时间戳向量
minute()返回时间戳的分钟部分(0-59分钟值向量
hour()返回时间戳的小时部分(0-23小时值向量
day_of_week()返回星期几(0-60表示星期日)星期值向量
day_of_month()返回月份中的第几天(1-31日期值向量
day_of_year()返回一年中的第几天(1-365/366天数值向量
days_in_month()返回月份的天数(28-31天数值向量
month()返回月份(1-12月份值向量
year()返回年份年份值向量

常用示例:

# 获取当前小时(0-23)
hour()

# 获取指标的时间戳
timestamp(up)

# 只在工作日(周一到周五)执行告警
day_of_week() > 0 and day_of_week() < 6

# 获取当前月份
month()

变化率和增长函数

函数名称函数描述返回值
rate()计算时间序列的每秒平均增长率(用于Counter每秒增长率向量
irate()计算时间序列的瞬时增长率(基于最后两个数据点)瞬时增长率向量
increase()计算时间范围内的增长量(用于Counter增长量向量
delta()计算时间范围内的差值(用于Gauge差值向量
idelta()计算最后两个样本之间的差值(用于Gauge差值向量
deriv()计算时间序列的每秒导数(使用简单线性回归)导数向量
predict_linear()基于线性回归预测未来值预测值向量
changes()返回时间范围内值变化的次数变化次数向量
resets()返回Counter重置的次数重置次数向量

常用示例:

# 计算HTTP请求的每秒速率
rate(http_requests_total[5m])

# 计算过去5分钟的请求增长量
increase(http_requests_total[5m])

# 计算CPU温度在2小时内的变化
delta(cpu_temp_celsius[2h])

# 预测1小时后的磁盘使用量(3600秒后)
predict_linear(disk_usage_bytes[1h], 3600)

聚合函数(时间范围)

函数名称函数描述返回值
avg_over_time()计算时间范围内的平均值平均值向量
min_over_time()计算时间范围内的最小值最小值向量
max_over_time()计算时间范围内的最大值最大值向量
sum_over_time()计算时间范围内的总和总和向量
count_over_time()计算时间范围内的样本数量样本数量向量
quantile_over_time()计算时间范围内的分位数分位数向量
stddev_over_time()计算时间范围内的标准差标准差向量
stdvar_over_time()计算时间范围内的方差方差向量
last_over_time()返回时间范围内的最后一个样本最后样本向量
present_over_time()如果时间范围内有任何样本则返回10或1的向量

常用示例:

# 计算过去5分钟CPU使用率的平均值
avg_over_time(cpu_usage[5m])

# 获取过去1小时温度的最大值
max_over_time(temperature[1h])

# 计算过去5分钟的95分位延迟
quantile_over_time(0.95, http_request_duration_seconds[5m])

# 检查指标在过去5分钟内是否有数据
present_over_time(up[5m])

实验性聚合函数(需要启用特性标志)

这些函数需要通过 --enable-feature=promql-experimental-functions 启用。

函数名称函数描述返回值
mad_over_time()计算时间范围内的中位数绝对偏差MAD值向量
first_over_time()返回时间范围内的第一个样本第一个样本向量
ts_of_first_over_time()返回第一个样本的时间戳时间戳向量
ts_of_last_over_time()返回最后一个样本的时间戳时间戳向量
ts_of_min_over_time()返回最小值样本的时间戳时间戳向量
ts_of_max_over_time()返回最大值样本的时间戳时间戳向量
double_exponential_smoothing()双指数平滑(Holt Linear平滑值向量

常用示例:

# 获取时间范围内的第一个样本
first_over_time(metric[5m])

# 获取最大值出现的时间戳
ts_of_max_over_time(cpu_usage[1h])

# 双指数平滑(平滑因子0.5,趋势因子0.5)
double_exponential_smoothing(metric[5m], 0.5, 0.5)

直方图函数

函数名称函数描述返回值
histogram_count()返回直方图中的观测数量计数向量
histogram_sum()返回直方图中的观测总和总和向量
histogram_avg()返回直方图的算术平均值平均值向量
histogram_quantile()计算直方图的分位数分位数向量
histogram_fraction()计算指定范围内的观测比例比例向量
histogram_stddev()返回直方图的标准差估计值标准差向量
histogram_stdvar()返回直方图的方差估计值方差向量

常用示例:

# 计算90分位的请求延迟(经典直方图)
histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m]))

# 计算平均请求延迟(原生直方图)
histogram_avg(rate(http_request_duration_seconds[5m]))

# 计算200ms以内请求的比例
histogram_fraction(0, 0.2, rate(http_request_duration_seconds[1h]))

# 按job聚合计算90分位延迟
histogram_quantile(0.9, sum by (job, le) (rate(http_request_duration_seconds_bucket[10m])))

标签操作函数

函数名称函数描述返回值
label_join()将多个标签的值连接成新标签带新标签的向量
label_replace()使用正则表达式替换标签值替换后的向量

常用示例:

# 将多个标签连接成新标签
label_join(up{job="api-server"}, "endpoint", ":", "instance", "port")

# 使用正则提取标签的一部分
label_replace(up{service="api:v1"}, "version", "$1", "service", ".*:(.*)")

# 从instance标签中提取主机名
label_replace(up, "host", "$1", "instance", "([^:]+):.*")

排序函数

函数名称函数描述返回值
sort()按样本值升序排序排序后的向量
sort_desc()按样本值降序排序排序后的向量
sort_by_label()按标签值升序排序(实验性)排序后的向量
sort_by_label_desc()按标签值降序排序(实验性)排序后的向量

常用示例:

# 按请求数降序排列
sort_desc(http_requests_total)

# 按instance标签升序排列
sort_by_label(up, "instance")

缺失值检测函数

函数名称函数描述返回值
absent()如果向量为空则返回1,否则返回空向量01的向量
absent_over_time()如果时间范围内向量为空则返回101的向量

常用示例:

# 检测指标是否不存在(用于告警)
absent(up{job="api-server"})

# 检测过去1小时内是否没有数据
absent_over_time(up{job="api-server"}[1h])

类型转换函数

函数名称函数描述返回值
scalar()将单元素向量转换为标量标量值或NaN
vector()将标量转换为向量单元素向量

常用示例:

# 将聚合结果转换为标量用于计算
scalar(sum(up))

# 将常量转换为向量
vector(100)

元数据函数

函数名称函数描述返回值
info()返回包含info标签的指标信息info类型指标

常用示例:

# 获取目标的元数据信息
target_info

三角函数

函数名称函数描述返回值
acos()反余弦函数反余弦值向量
acosh()反双曲余弦函数反双曲余弦值向量
asin()反正弦函数反正弦值向量
asinh()反双曲正弦函数反双曲正弦值向量
atan()反正切函数反正切值向量
atanh()反双曲正切函数反双曲正切值向量
cos()余弦函数余弦值向量
cosh()双曲余弦函数双曲余弦值向量
sin()正弦函数正弦值向量
sinh()双曲正弦函数双曲正弦值向量
tan()正切函数正切值向量
tanh()双曲正切函数双曲正切值向量
deg()将弧度转换为角度角度值向量
rad()将角度转换为弧度弧度值向量
pi()返回π的值π

常用示例:

# 获取π的值
pi()

# 将角度转换为弧度
rad(90) # 结果约为1.5708

# 将弧度转换为角度
deg(pi()) # 结果为180