RRDtool数据不一致

时间:2014-03-10 15:49:13

标签: rrdtool

我正在使用RRDtool来绘制Raspberry Pi上泵的状态。我必须做一些错误的配置,因为值接近我输入的值,但不完全正确。

引脚状态应为1或0.

<!-- 2014-03-10 10:24:00 CDT / 1394465040 --> <row><v>NaN</v></row> <!-- 2014-03-10 10:25:00 CDT / 1394465100 --> <row><v>NaN</v></row> <!-- 2014-03-10 10:26:00 CDT / 1394465160 --> <row><v>1.0000000000e+00</v></row> <!-- 2014-03-10 10:27:00 CDT / 1394465220 --> <row><v>2.3711630000e-01</v></row> <!-- 2014-03-10 10:28:00 CDT / 1394465280 --> <row><v>9.8168226667e-01</v></row> <!-- 2014-03-10 10:29:00 CDT / 1394465340 --> <row><v>1.6624716667e-02</v></row> <!-- 2014-03-10 10:30:00 CDT / 1394465400 --> <row><v>9.8544061667e-01</v></row> <!-- 2014-03-10 10:31:00 CDT / 1394465460 --> <row><v>2.9590616667e-02</v></row> <!-- 2014-03-10 10:32:00 CDT / 1394465520 --> <row><v>9.7204963333e-01</v></row> <!-- 2014-03-10 10:33:00 CDT / 1394465580 --> <row><v>2.6263616667e-02</v></row> <!-- 2014-03-10 10:34:00 CDT / 1394465640 --> <row><v>9.7533411667e-01</v></row> <!-- 2014-03-10 10:35:00 CDT / 1394465700 --> <row><v>2.3075633333e-02</v></row> <!-- 2014-03-10 10:36:00 CDT / 1394465760 --> <row><v>9.7849575000e-01</v></row> <!-- 2014-03-10 10:37:00 CDT / 1394465820 --> <row><v>1.9948233333e-02</v></row> <!-- 2014-03-10 10:38:00 CDT / 1394465880 --> <row><v>9.8158333333e-01</v></row> <!-- 2014-03-10 10:39:00 CDT / 1394465940 --> <row><v>1.6888216667e-02</v></row> <!-- 2014-03-10 10:40:00 CDT / 1394466000 --> <row><v>9.2141166667e-01</v></row> <!-- 2014-03-10 10:41:00 CDT / 1394466060 --> <row><v>5.2411610000e-01</v></row> <!-- 2014-03-10 10:42:00 CDT / 1394466120 --> <row><v>5.2411610000e-01</v></row> <!-- 2014-03-10 10:43:00 CDT / 1394466180 --> <row><v>9.6672030000e-01</v></row> <!-- 2014-03-10 10:44:00 CDT / 1394466240 --> <row><v>5.0939110833e-01</v></row> <!-- 2014-03-10 10:45:00 CDT / 1394466300 --> <row><v>5.0939110833e-01</v></row> <!-- 2014-03-10 10:46:00 CDT / 1394466360 --> <row><v>4.9845539167e-01</v></row> <!-- 2014-03-10 10:47:00 CDT / 1394466420 --> <row><v>4.9845539167e-01</v></row> <!-- 2014-03-10 10:48:00 CDT / 1394466480 --> <row><v>9.9399037500e-01</v></row> <!-- 2014-03-10 10:49:00 CDT / 1394466540 --> <row><v>9.9399037500e-01</v></row> <!-- 2014-03-10 10:50:00 CDT / 1394466600 --> <row><v>2.6977033333e-02</v></row> <!-- 2014-03-10 10:51:00 CDT / 1394466660 --> <row><v>9.7898348333e-01</v></row> <!-- 2014-03-10 10:52:00 CDT / 1394466720 --> <row><v>9.7898348333e-01</v></row>

create_db.sh #!/bin/bash rrdtool create pinstats.rrd \ --step 60 \ DS:pump:GAUGE:600:0:1 \ RRA:MAX:0.5:1:2016

update.sh

#!/bin/sh a=0 while [ "$a" == 0 ]; do echo "pump on日期" /home/pi/on.sh /home/pi/graph.sh pump=1 rrdtool update pinstats.rrd N:$pump sleep 60 echo "pump off日期" /home/pi/off.sh /home/pi/graph.sh pump=0 rrdtool update pinstats.rrd N:$pump sleep 120 done

1 个答案:

答案 0 :(得分:0)

您受到数据规范化的影响。

这将根据线性近似值调整您的值,以使时间点位于间隔边界上。 IE,如果您的间隔是5分钟,那么更新后的值将是12:00,12:05,12:10 ......等等

如果要绘制一个大数字,这是有意义的;整体平均值仍然有效,数据定期。但是,如果您使用具有小整数的Gauge数据类型,则会出现问题。

为了避免这种情况,您必须更新间隔边界,而不是使用N作为您的时间点。

试试这个shell代码:

interval=60
timestamp=`date +%s`
num_intervals=`expr $timestamp / $interval`
adjusted_time=`expr $num_intervals '*' $interval`
rrdtool update pistats.rrd $adjusted_time:1
sleep $interval
adjusted_time=`expr $adjusted_time + $interval`
rrdtool update pistats.rrd $adjusted_time:0

此代码确保更新时间完全在区间边界上,因此不执行数据规范化(实际上,它变为空操作)。

有关详细信息,请参阅Alex van den Bogaerdt的优秀教程here