Prometheus之sum_over_time函数

发布时间 2023-05-05 20:43:28作者: N!CE波

一、sum_over_time

sum_over_time 是 Prometheus 中用于计算指定时间段内时间序列数据的和的函数。它可以对单个时间序列或多个时间序列进行操作,并返回指定时间范围内时间序列值的总和。

sum_over_time 函数的语法如下:

sum_over_time(range vector-expression) 

其中,range 指定了要计算的时间范围,vector-expression 是一个查询表达式,它返回一个或多个时间序列。range 参数可以是一个持续时间字符串,也可以是一个时间戳。

例如,以下查询将返回 node_memory_Active_bytes 指标在过去 5 分钟内的值总和:

sum_over_time(node_memory_Active_bytes[5m])

 

二、 sum 和 by 关键字结合 sum_over_time 函数

如果您想要按照某个标签值对多个时间序列进行聚合,可以使用 sumby 关键字结合 sum_over_time 函数。例如,以下查询将返回 node_memory_Active_bytes 指标在过去 5 分钟内按 job 标签的值进行聚合的总和:

sum by (job) (sum_over_time(node_memory_Active_bytes[5m]))

除了 sum 函数之外,avgminmax 等聚合函数也可以与 sum_over_time 函数一起使用,以计算指定时间段内的平均值、最小值、最大值等。

 

三、rate函数结合sum_over_time

sum_over_time 函数还可以用于计算指定时间范围内的时间序列数据的增量或变化量,这可以通过使用 rate 函数来实现。

rate 函数计算时间序列的斜率,即时间序列数据的变化率,单位是每秒。因此,rate 函数的返回值表示指定时间范围内时间序列数据的平均增量。将 sum_over_timerate 函数结合使用,可以计算指定时间范围内时间序列数据的总增量或变化量。

以下是一个计算过去 1 分钟内 http_requests_total 指标的请求数的平均速率的示例:

rate(sum_over_time(http_requests_total[1m]))

rate 函数的参数可以是一个时间序列向量表达式,也可以是一个单个时间序列。在上述示例中,sum_over_time(http_requests_total[1m]) 返回一个向量表达式,表示在过去 1 分钟内 http_requests_total 指标的总和。rate 函数计算这个时间序列的增量,即在过去 1 分钟内 http_requests_total 指标值的平均增量。

注意:由于 rate 函数的计算方式是通过近似时间序列的斜率来计算的,因此它对数据中的任何峰值和谷值都很敏感。在计算变化量时,请谨慎使用 rate 函数,并确保您的数据具有稳定的趋势,以便获得准确的结果。

 

官方文档:https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time