使用 RRDtool 记录总值的最佳方法?

Posted

技术标签:

【中文标题】使用 RRDtool 记录总值的最佳方法?【英文标题】:The best approach to log total values with RRDtool? 【发布时间】:2017-10-31 19:56:47 【问题描述】:

我正在开发一个能耗图表系统。该脚本正在提取能量计的当前 Kwh,然后使用 DS COUNTER 将其推送到 rrd 数据库。我曾尝试使用 VDEF 来计算 DEF 的平均值,但我似乎找不到用这种方法制作“步骤”的好方法。

我的目标是能够从数据库中获取一周的数据,然后计算每天的总数。我似乎找不到最好的方法来做到这一点。 RRDtool 是执行此操作的推进方式吗?如果是,正确的做法是什么?

【问题讨论】:

【参考方案1】:

RRDTool 在记录速率时效果最佳。因此,通过使用COUNTER DS 类型,您可以将周期性 kWh 总计更改为数据库中的时间点 W 值。

例如,如果您每分钟采样一次,则可以将 kWh 乘以 3600000(得到瓦秒或焦耳)并让 RRDTool 使用 COUNTER 类型将其转换为每秒速率或瓦特(为了清晰和简单,最好以 SI 单位存储数据)。

然后您可以通过乘以步长来显示或计算它。

例如,如果您希望查看每天使用的千瓦时图表,则需要定义 1 天粒度的 RRA。然后,您可以从中获取数据(使用rrdtool fetch 或具有特定数据粒度的rrdtool graph)并获得通过将平均瓦特乘以间隔,然后除以3600000 得到kWh 的计算值。

这会创建一个采样率为 1 分钟的 RRD 文件,用于存储瓦特数。

rrdtool create power.rrd --step 60 \
  DS:watts:COUNTER:120:0: \
  RRA:AVERAGE:0.5:1:86400 \
  RRA:AVERAGE:0.5:1440:400

这将根据您最新的千瓦时样本更新 RRD

JOULES=`expr $KWH \* 3600000`
rrdtool update power.rrd N:$JOULES

这将绘制一个月内的每日使用量(以千瓦时为单位)

rrdtool graph graph.png \
  --end now  --start "end-1month"  --step 86400 \
  --title "Power usage per day"  --vertical-label "kWh" \
  --units-exponent 0 \
  DEF:watts=power.rrd:watts:AVERAGE:step=86400 \
  CDEF:kwh=watts,STEPWIDTH,*,3600,/,1000,/ \
  VDEF:totkwh=watts,TOTAL,3600000,/ \
  GRPINT:totkwh:"Total kWh this month: %.0lf kWh"

当然,您可以根据需要对其进行修改。您可能需要不同的 RRA、图表步骤或摘要。

【讨论】:

这不是""本月过去天数的总千瓦时:%.0lf kWh"

以上是关于使用 RRDtool 记录总值的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

rrdtool结合python统计网卡流量

rrdtool资料

安装和使用Smokeping

选择超过总值百分比的行子集

cacti平台搭建rrdtool解决方法

RRDTool 三个命令的使用