Prometheus 提供了丰富的函数和操作符,帮助用户在 PromQL 查询语言中处理和分析时间序列数据。以下是一些常用的 Prometheus 函数:
1. 聚合函数(Aggregation Functions)
聚合函数用于按某些维度聚合数据,通常用于将多个时间序列合并为一个更具概括性的度量。
-
avg()
:计算平均值
scssavg(http_requests_total)
-
sum()
:计算总和
scsssum(http_requests_total)
-
min()
:计算最小值
scssmin(http_requests_total)
-
max()
:计算最大值
scssmax(http_requests_total)
-
count()
:计算数量
scsscount(http_requests_total)
-
count_values()
:计算不同标签值的数量
scsscount_values("method", http_requests_total)
-
topk(k, expr)
:返回值排名前
k
的时间序列
scsstopk(3, http_requests_total)
-
bottomk(k, expr)
:返回值排名后
k
的时间序列
scssbottomk(3, http_requests_total)
2. 统计函数(Statistical Functions)
-
rate()
:计算时间序列在某个时间段内的速率(适用于计数器类型)
scssrate(http_requests_total[5m])
-
irate()
:计算瞬时速率,适用于计数器类型
scssirate(http_requests_total[1m])
-
increase()
:计算计数器类型的增量值
scssincrease(http_requests_total[1h])
-
delta()
:计算某时间段内的值的变化量
scssdelta(http_requests_total[5m])
-
avg_over_time()
:计算某个时间区间内的平均值
scssavg_over_time(http_requests_total[1h])
-
min_over_time()
:计算某个时间区间内的最小值
scssmin_over_time(http_requests_total[1h])
-
max_over_time()
:计算某个时间区间内的最大值
scssmax_over_time(http_requests_total[1h])
3. 时间函数(Time Functions)
时间函数用于操作时间戳和时间序列。
-
time()
:返回当前的时间戳(以秒为单位)
csstime()
-
timestamp()
:返回时间序列的时间戳
scsstimestamp(http_requests_total)
4. 数值处理函数(Mathematical Functions)
这些函数用于进行常见的数学运算。
-
abs()
:返回绝对值
scssabs(http_requests_total)
-
ceil()
:返回大于或等于该值的最小整数
scssceil(http_requests_total)
-
floor()
:返回小于或等于该值的最大整数
scssfloor(http_requests_total)
-
round()
:返回四舍五入的值
scssround(http_requests_total)
-
sqrt()
:计算平方根
scsssqrt(http_requests_total)
5. 字符串处理函数(String Functions)
字符串函数主要用于对标签值或字符串型数据进行处理。
-
label_replace()
:用于替换标签中的部分内容
bashlabel_replace(http_requests_total, "method", "$1", "status", "(.*)")
-
label_join()
:将多个标签值连接为一个新标签
vbscriptlabel_join(http_requests_total, "method", "-", "status", "code")
6. 查询时间函数(Time Interval Functions)
这些函数用于处理时间区间。
-
avg_over_time()
:计算某个时间范围内的平均值
scssavg_over_time(http_requests_total[1h])
-
rate()
:计算在某段时间内的速率
scssrate(http_requests_total[5m])
7. 率函数(Rate Functions)
用于计算单位时间内的数据变化量。
-
rate()
:适用于计数器类型,计算单位时间内的变化速率
scssrate(http_requests_total[5m])
-
irate()
:即时速率,适用于计数器类型,计算最近两个数据点的速率
scssirate(http_requests_total[1m])
8. 逻辑函数(Logical Functions)
这些函数帮助进行逻辑判断和操作。
-
and
:用于两个表达式的与操作
inihttp_requests_total{status="200"} and http_requests_total{status="500"}
-
or
:用于两个表达式的或操作
inihttp_requests_total{status="200"} or http_requests_total{status="404"}
-
unless
:排除某些条件
inihttp_requests_total unless http_requests_total{status="500"}
9. 过滤与条件(Filters & Conditionals)
-
on()
:用于条件匹配,可以指定某些标签参与匹配
inihttp_requests_total{status="200"} on(method) http_requests_total{status="500"}
-
ignoring()
:忽略特定的标签进行条件匹配
inihttp_requests_total{status="200"} ignoring(method) http_requests_total{status="500"}
10. 百分比计算(Percentile Calculation)
-
histogram_quantile()
:用于计算直方图的指定分位数(如 95th 百分位)
scsshistogram_quantile(0.95, http_request_duration_seconds_bucket)
总结:
Prometheus 提供了多种函数来帮助你处理和分析监控数据。你可以通过这些函数来进行聚合、时间序列计算、统计分析以及进行复杂的查询和可视化。