You need to enable JavaScript to run this app.
导航

PromQL 常用函数

最近更新时间2024.04.23 15:06:40

首次发布时间2023.02.28 17:57:43

PromQL 内置大量函数,通过直接使用这些函数,可以快速的完成常用指标的处理。本文为您介绍最常用的内置函数。

increase 函数

increase 函数是 PromQL 中提供的众多内置函数之一。该函数获取区间向量中的第一个样本和最后一个样本,并返回其增长量。

例如,可以通过以下表达式,获取节点存储 5 分钟内的变化量。

increase(node_filesystem_free_bytes{mountpoint="/data00"}[5m])

rate 和 irate 函数

rate 函数可以直接计算区间向量在时间窗口内平均增长速率,它会在单调性发生变化时(例如:由于采样目标重启引起的计数器复位)自动中断。

irate 函数用于计算区间向量的增长率,但是其反应出的是瞬时增长率。irate 函数是通过区间向量中最后两个样本数据来计算区间向量的增长速率,它会在单调性发生变化时(例如:由于采样目标重启引起的计数器复位)自动中断。这种方式可以避免在时间窗口范围内的 长尾问题,并且体现出更好的灵敏度,通过 irate 函数绘制的图标能够更好的反应样本数据的瞬时变化状态。

说明

rate 与 irate 函数仅适用于 Counter 类型的 Metrics。

例如,可以通过以下表达式,获取 HTTP Request 请求5 分钟内的变化率。

rate(http_request_total{status="200", method="GET"}[5m])

irate(http_request_total{status="200", method="GET"}[5m])

注意

当将 rate() 与 irate() 函数与聚合函数(例如 sum() )或随时间聚合的函数(任何以 _over_time 结尾的函数)一起使用时,必须先执行 rate() 或 irate() 函数,然后再进行聚合操作,否则当采样目标重新启动时 rate() 无法检测到计数器是否被重置。

# 推荐
sum(rate(http_request_total{status="200", method="GET"}[5m])) by (status, method)

# 不推荐
rate(sum(http_request_total{status="200", method="GET"}) by (status, method)[5m])

delta 与 idelta 函数

delta 函数的参数是一个区间向量,返回一个瞬时向量。它计算一个区间向量的第一个元素和最后一个元素之间的差值。由于这个值被外推到指定的整个时间范围,所以即使样本值都是整数,你仍然可能会得到一个非整数值。

idelta 函数与 delta 函数类似, 不同的是它计算最新的 2 个样本值之间的差值。

说明

idelta 函数与 delta 函数一般只用在 Gauge 类型的时间序列上。

例如,可以通过以下表达式,获取最近两个小时 CPU 的温度差值。

delta(cpu_temp_celsius{host="zeus"}[2h])

histogram_quantile 函数

histogram_quantile 函数用于 Histogram 类型 metrics,用于计算分位数。

例如,可以通过以下表达式,计算延迟的 P99 值。

histogram_quantile(0.99 , rate(prometheus_tsdb_compaction_chunk_range_bucket[5m]))

absent 函数

absent 函数一般用于验证 样本是否存在,如果存在则返回空,如果不存在,则返回 1。

例如,可以通过以下表达式,确认节点中 node exporter 是否存在。

absent(up{job="node-exporter", instance="127.0.0.1:9100"})