如何在Grafana中计算设备近24小时及月度运行时长?
Grafana计算设备运行时长入门指引
一、当前查询的说明
你现在用的 avg_over_time(up{instance="***.***.***.**:****"}[24h]) * 100 是计算24小时内设备的平均可用性百分比,不是实际运行时长。up 指标取值为1(在线)或0(离线),这个语句取这段时间的平均值再乘100得到可用性占比,但如果要统计实际运行的时长(比如多少小时),需要调整查询逻辑。
二、运行时长的正确计算方法
1. 近24小时运行时长
要计算实际运行时长,用 sum_over_time 函数累加up为1时的所有样本时间:
# 结果单位为秒,直接显示原始值 sum_over_time(up{instance="***.***.***.**:****"}[24h]) # 转换为小时显示 sum_over_time(up{instance="***.***.***.**:****"}[24h]) / 3600
sum_over_time会把区间内每个up=1的样本对应的采集间隔(比如Prometheus默认15秒)累加,最终得到总在线秒数,除以3600即可转为小时。
2. 月度运行时长
月度统计完全可行,注意Prometheus的区间选择器支持[1mo](Prometheus 2.7及以上版本),自动适配不同月份的天数;如果版本不支持,用[31d]覆盖最长月份:
# 月度时长(小时) sum_over_time(up{instance="***.***.***.**:****"}[1mo]) / 3600 # 兼容旧版本的写法 sum_over_time(up{instance="***.***.***.**:****"}[31d]) / 3600
三、面板配置步骤
- 新建两个独立面板,分别命名为「近24小时运行时长」和「月度运行时长」
- 每个面板选择你的Prometheus作为数据源
- 在查询编辑器中填入对应时长的PromQL语句
- 可视化类型推荐选Stat(大数字展示)或Gauge(仪表盘),直观呈现时长数值
- 设置单位:在面板「Visualization」选项卡的「Unit」中选择「time > hours」,让数值自动以小时为单位显示
- 时间范围:24小时面板选「Last 24 hours」,月度面板选「Last 30 days」或「Current month」
四、实用小技巧
- 如果要统计多台设备的运行时长,去掉
instance标签过滤,或用by(instance)按设备分组:sum_over_time(up[24h]) by (instance) / 3600 - 确保Prometheus的
up指标采集频率稳定,否则时长统计会有微小误差 - 若需要严格统计自然月(如当月1日至当日),可结合Grafana的时间变量实现,入门阶段用
[1mo]足够满足需求
内容的提问来源于stack exchange,提问作者Prodromos Koliopoulos
相关产品推荐
相关产品推荐

