Prometheus之sum_over_time函数
一、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 函数
如果您想要按照某个标签值对多个时间序列进行聚合,可以使用 sum
和 by
关键字结合 sum_over_time
函数。例如,以下查询将返回 node_memory_Active_bytes
指标在过去 5 分钟内按 job
标签的值进行聚合的总和:
sum by (job) (sum_over_time(node_memory_Active_bytes[5m]))
除了 sum
函数之外,avg
、min
、max
等聚合函数也可以与 sum_over_time
函数一起使用,以计算指定时间段内的平均值、最小值、最大值等。
三、rate函数结合sum_over_time
sum_over_time
函数还可以用于计算指定时间范围内的时间序列数据的增量或变化量,这可以通过使用 rate
函数来实现。
rate
函数计算时间序列的斜率,即时间序列数据的变化率,单位是每秒。因此,rate
函数的返回值表示指定时间范围内时间序列数据的平均增量。将 sum_over_time
和 rate
函数结合使用,可以计算指定时间范围内时间序列数据的总增量或变化量。
以下是一个计算过去 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