Prometheus如何从总量指标计算日用量并按车型及类型分组?
Prometheus 计数器每日用量查询方案
1. 获取每日数值的核心函数
因为bytes_total_incoming是计数器类型指标(单调递增,进程重启或指标重置时会归零),要获取每日实际用量,必须先计算指标的时间增量,推荐使用increase()函数:
increase()的作用是计算计数器在指定时间窗口内的总增长量,正好对应每日的实际消耗字节数。- 基础查询语句:
该语句会返回每个increase(bytes_total_incoming[1d])car_name和type组合在过去24小时内的字节总量增量。
2. 按car_name和type分组计算每日用量
由于指标本身已携带car_name和type标签,increase()会自动保留这些维度的分组信息。如果需要明确排除其他无关标签的干扰,可以加上by()子句指定分组维度:
increase(bytes_total_incoming[1d]) by (car_name, type)
执行后会按car_name和type的唯一组合,分别输出对应的每日字节用量。
3. 是否必须使用irate?sum类函数能否直接用?
- 不需要使用irate:
irate()是基于最近两个数据点计算瞬时速率,适合监控短时间窗口内的突发流量(比如1分钟),但不适合计算每日这类长周期的总量。长周期场景下用increase()或rate()(需乘以时间秒数,如rate(bytes_total_incoming[1d]) * 86400,结果与increase()一致)更合适。 - 不能直接使用sum类函数:sum直接作用于计数器的累计值没有意义(累计值是持续增长的总数值),必须先通过
increase()或rate()计算出时间增量后,再根据需求进行sum聚合(比如按car_name汇总所有type的用量:sum(increase(bytes_total_incoming[1d])) by (car_name))。
内容的提问来源于stack exchange,提问作者Tony Stark
相关产品推荐
相关产品推荐

