如何用Prometheus在Grafana中查询光伏系统近30天每日自然日发电量?
解决自然日发电量统计问题
要准确统计过去30天内**每个自然日(00:00-23:59)**的发电量,需要让查询对齐到每日的起始和结束时间,而非基于当前时刻的滑动1天窗口,具体可采用以下几种方案:
方案1:利用Grafana内置变量对齐自然日
若已将Grafana面板的时间分组设置为「每天」(比如在图表的「Axes」或「Panel options」中设置时间间隔为1d),直接使用以下查询即可:
increase(growatt_epvtotal{device=~"$device"}[$__interval])
$__interval会自动匹配Grafana设置的每日时间间隔,并对齐到自然日0点起始,确保计算的是完整一天的发电量增量。
方案2:强制对齐到自然日时间点
如果需要手动控制时间对齐逻辑,使用@操作符指定查询时间点为每日0点,通过当日与前一日0点的累计值差值得到完整日发电量:
growatt_epvtotal{device=~"$device"} @ floor(time() / 86400) * 86400 - growatt_epvtotal{device=~"$device"} @ (floor(time() / 86400) - 1) * 86400
floor(time() / 86400) * 86400:将当前时间向下取整到当日0点的时间戳(86400为一天的秒数)- 第一个表达式取当日0点的累计发电量,第二个取前一日0点的累计值,差值即为前一日的完整发电量
方案3:按日期分组统计
若需按日期维度分组展示,可结合date函数,用increase按天统计:
increase(growatt_epvtotal{device=~"$device"}[1d]) by (date(timestamp(growatt_epvtotal)))
该查询会自动按自然日分组,计算每一天的发电量增量,结果会附带对应的日期标签。
注意事项
- 确保
growatt_epvtotal是单调递增的累计指标(符合increase/delta的使用要求);若指标每日清零,则直接用sum_over_time(growatt_epvtotal{device=~"$device"}[1d])即可 - 在Grafana中选择时间范围时,建议将结束时间设为「今日0点」,避免包含当天未完成的发电量数据
内容的提问来源于stack exchange,提问作者Dániel Kis
相关产品推荐
相关产品推荐

