我正在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
时,第二DS是类型DERIVE
。当数据类型为GAUGE
时,只能使用非整数值,这是一个(记录不足)事实。
所以,你有四个选择-
- 确保您的第二个值(表示"rate")始终为整数
- 将其更改为类型
GAUGE
并传递速率而不是值 - 完全删除第二个DS,并在显示数据时实时计算
- 将
rate
DS替换为COMPUTE DS类型,以便在存储时进行计算
最后一个可能是最好的选择,但需要一些工作。