使用Grafana 7.5和Prometheus查询每日最大值缺失当日数据求助
解决方案:获取每日数据(含当日)并按需求聚合
核心问题分析
设置Min step=1d后看不到当日数据,是因为Prometheus的步长对齐按自然日边界(如00:00)执行,当日未结束时没有完整的1d步长数据点。需要用PromQL范围向量函数提取每日的最后非空值或最大值,同时兼容当日未完成的数据。
针对需求的查询语句
1. 单个module的每日最后非空值(或最大值)
因为数据每日清空后只增不减,最后值等价于当日最大值,用last_over_time函数提取:
last_over_time(my_total{job="$job",app="$appRepeatVar"}[1d])
该查询会对每个自然日(含当前未结束的日),提取对应module过去24小时内的最后一个非空值,完美兼容当日数据。
2. 按module求和后的每日总值
若需将所有module的数值求和得到每日总值(含当日),先对每个module取每日最后值再求和:
sum(last_over_time(my_total{job="$job",app="$appRepeatVar"}[1d])) by (app)
如果需要保留module维度,去掉by (app)即可:
sum(last_over_time(my_total{job="$job",app="$appRepeatVar"}[1d])) by (module, app)
3. 用最大值替代最后值的写法
如果更倾向于取每日最大值(效果和最后值一致),替换函数为max_over_time:
max_over_time(my_total{job="$job",app="$appRepeatVar"}[1d])
面板配置调整
- 无需设置
Min step=1d,上述查询已通过范围向量[1d]实现按日聚合。 - 保持Bar Gauge的
Calculation=total(求和场景),或根据需求选择Last/Max(单个module场景)。 - 时间范围选“今天”或“最近N天”时,当日数据会正常显示。
验证逻辑
- 已结束的日期:
last_over_time会提取当日最后一个数据点(即当日最大值)。 - 当前日期:会提取到查询时刻为止的最后一个非空值,实时反映当日累计数据。
内容的提问来源于stack exchange,提问作者tony zheng
相关产品推荐
相关产品推荐

