我在我的rrdb中获得所有NaN
。为什么?
rrdtool create temps.rrd --step 120 \
DS:temp:GAUGE:250:-10:212 \
DS:rate:DERIVE:250:-10:212 \
DS:setpoint:GAUGE:250:-10:212 \
RRA:AVERAGE:0.3:1:43200
经过一夜收集数据并每2分钟更新一次,如下所示:
/usr/bin/rrdupdate temps.rrd N:30.8:30.8:9.6
DS正在改变,但RRA没有任何条目。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rrd SYSTEM "http://oss.oetiker.ch/rrdtool/rrdtool.dtd">
<!-- Round Robin Database Dump -->
<rrd>
<version>0003</version>
<step>120</step> <!-- Seconds -->
<lastupdate>1375360140</lastupdate> <!-- 2013-08-01 07:29:00 CDT -->
<ds>
<name> temp </name>
<type> GAUGE </type>
<minimal_heartbeat>250</minimal_heartbeat>
<min>-1.0000000000e+01</min>
<max>2.1200000000e+02</max>
<!-- PDP Status -->
<last_ds>60.1</last_ds>
<value>NaN</value>
<unknown_sec> 60 </unknown_sec>
</ds>
<ds>
<name> rate </name>
<type> DERIVE </type>
<minimal_heartbeat>250</minimal_heartbeat>
<min>-1.0000000000e+01</min>
<max>2.1200000000e+02</max>
<!-- PDP Status -->
<last_ds>59.9</last_ds>
<value>NaN</value>
<unknown_sec> 60 </unknown_sec>
</ds>
<ds>
<name> setpoint </name>
<type> GAUGE </type>
<minimal_heartbeat>250</minimal_heartbeat>
<min>-1.0000000000e+01</min>
<max>2.1200000000e+02</max>
<!-- PDP Status -->
<last_ds>60.0</last_ds>
<value>NaN</value>
<unknown_sec> 60 </unknown_sec>
</ds>
<!-- Round Robin Archives -->
<rra>
<cf>AVERAGE</cf>
<pdp_per_row>1</pdp_per_row> <!-- 120 seconds -->
<params>
<xff>3.0000000000e-01</xff>
</params>
<cdp_prep>
<ds>
<primary_value>NaN</primary_value>
<secondary_value>NaN</secondary_value>
<value>NaN</value>
<unknown_datapoints>0</unknown_datapoints>
</ds>
<ds>
<primary_value>NaN</primary_value>
<secondary_value>NaN</secondary_value>
<value>NaN</value>
<unknown_datapoints>0</unknown_datapoints>
</ds>
<ds>
<primary_value>NaN</primary_value>
<secondary_value>NaN</secondary_value>
<value>NaN</value>
<unknown_datapoints>0</unknown_datapoints>
</ds>
</cdp_prep>
<database>
<!-- 2013-06-02 07:30:00 CDT / 1370176200 --> <row><v>NaN</v><v>NaN</v><v>NaN</v></row>
<!-- 2013-06-02 07:32:00 CDT / 1370176320 --> <row><v>NaN</v><v>NaN</v><v>NaN</v></row>
<!-- 2013-06-02 07:34:00 CDT / 1370176440 --> <row><v>NaN</v><v>NaN</v><v>NaN</v></row>
many lines, all NaN
<!-- 2013-08-01 07:26:00 CDT / 1375359960 --> <row><v>NaN</v><v>NaN</v><v>NaN</v></row>
<!-- 2013-08-01 07:28:00 CDT / 1375360080 --> <row><v>NaN</v><v>NaN</v><v>NaN</v></row>
</database>
</rra>
</rrd>
你的问题是你实际上并没有存储任何数据;你的rrdupdate调用失败了。
如果从命令行运行rrdupdate
命令,您将立即看到错误:
$ rrdtool update temps.rrd N:30.8:31.2:9.1
ERROR: temps.rrd: not a simple signed integer: '31.2'
这样做的原因是,虽然第一个和第三个DS是GAUGE
类型,但第二个类型是DERIVE
。这是一个(记录不完整)事实,当数据类型为GAUGE
时,您只能使用非整数值。
所以,你有四个选择 -
GAUGE
并传递速率而不是值rate
DS替换为COMPUTE DS类型以在存储时计算最后一个可能是最好的选择,但需要一些工作。