avg_over_time(rate()) 相对于 rate() 本身的优势?

Advantage of avg_over_time(rate()) over rate() by itself?

通常我的计数器指标查询如下所示:

rate(metric_total[5m])
rate(metric_total[$__interval])

但是在查看使用 Prometheus 和 Grafana 的各种公司/团队(例如 GitLab 基础架构团队)时,我遇到了以下结构:

avg_over_time(recording_rule:rate_5m[$__interval])

所以我想知道:第二种方法有优势吗?


这是一个具体的例子:https://dashboards.gitlab.com/d/frontend-main/frontend-overview?orgId=1&viewPanel=23

第二种方法不需要您为每个可能的时间间隔制定记录规则,您希望在该时间间隔内获得平均速率,从而节省资源。

avg_over_time(rate(metric_total[5m])[$__interval:]) 计算平均速率的平均值。这不是一个好的指标,因为 average of averages doesn't equal to average。因此,更好的方法是计算 rate(metric_total[$__interval]) - 它 returns metric_total 在给定的回顾 window $__interval 上的实际平均 per-second 增长率.