如何用PromQL获取计数器每日午夜至午夜的增量(Grafana)
如何统计每日午夜到午夜的posts_total增量
直接可用的PromQL查询
要拿到自然日(午夜到午夜)的增量,用下面的查询就行,完美适配柱状图展示:
sum by (status, day) ( increase(posts_total{status=~"active|deleted"}[1d]) * on() group_left(day) floor(time() / 86400) )
如果想更精准定位前一天的完整数据,用这个偏移版本:
increase(posts_total{status=~"active|deleted"}[1d] offset 1d) and on() (floor(time() / 86400) == floor((time() - 86400) / 86400))
关键逻辑说明
floor(time() / 86400):把时间戳转成天级别的整数,相当于给每一天打个唯一标记,用来按自然日分组,避免滚动窗口的混乱。increase比你之前用的delta更适合计数器类型指标,能自动处理计数器重置的情况,结果更准确。offset 1d:让查询窗口完全落在前一天范围内,确保统计的是完整的午夜到午夜数据,缩放后也能精准对应到某天的增量。
可视化配置要点
在Grafana这类工具里,把图表类型改成柱状图,时间分组选1d(自然日)即可。要查看2天前、3个月前的具体增量值?直接在时间选择器里定位到对应日期,柱状图会清晰展示当日的数值,不会像滚动窗口那样缩放后失去意义。
进阶:添加可读日期标签
如果想让图表上的日期更直观,用label_replace把天级整数转成可读格式:
label_replace( sum by (status, day) (increase(posts_total{status=~"active|deleted"}[1d] offset 1d)), "date", "$1", "day", "(\d+)" )
之后在可视化工具里把day标签的格式改成YYYY-MM-DD,就能看到清晰的日期标识了。
内容的提问来源于stack exchange,提问作者Some Guy
相关产品推荐
相关产品推荐

