我要从家里的电表中提取家用天然气的使用量,并尝试将其保存到RRD数据库中,然后使用rrdtool从那里提取以创建图形。
我一直在使用GAUGE db类型对不同的数据源进行此操作,这些数据类型都可以更新/绘图。出于某种原因,我似乎无法使用COUNTER类型的数据源来运行事情。
这就是我一直在使用的东西。
a = 12
b = 3
print(f'12 multiply 3 is {a * b}.')
这些是rrdtool更新语句:
rrdtool create db/gas.rrd --step 300 \
DS:gas_in:COUNTER:600:0:U \
RRA:AVERAGE:0.8:1:300 \
RRA:AVERAGE:0.8:12:200 \
RRA:MAX:0.8:1:300 \
RRA:MAX:0.8:12:200
创建图形
rrdtool update db/gas.rrd N:0
rrdtool update db/gas.rrd N:52
rrdtool update db/gas.rrd N:64
rrdtool update db/gas.rrd N:458
etc.
结果图像示例:
rrdtool的输出获取db / gas.rrd MAX -e1564217220 -s $((1564217220-21600))
rrdtool graph \
-E -R light \
-t "Gas" \
-v "cm^3" \
gas.png \
--start 21600 \
DEF:gas=db/gas.rrd:gas_in:AVERAGE \
LINE1:gas#99ff00:"Gas (cm^3)\t" \
GPRINT:gas:LAST:"last %3.0lf%s" \
GPRINT:gas:AVERAGE:"avg. %3.0lf%s\n"
如果我运行带有调试选项的更新:
--%<--
1564217100: -nan
1564217400: -nan
--%<--
第二次运行只会返回
$ rrdtool updatev /home/arne/scripts/rrd/db/gas.rrd N:900
return_value = 0
[1564131900]RRA[AVERAGE][1]DS[gas_in] = NaN
[1564132500]RRA[AVERAGE][1]DS[gas_in] = NaN
[1564132800]RRA[AVERAGE][1]DS[gas_in] = NaN
----%<--- (more NaN's)
(不确定表示什么,可能是“因为相同的值而不允许?”)
数据似乎没有进入RRD。我究竟做错了什么? (恐怕答案会包含有关“费率”的内容。)
答案 0 :(得分:0)
您没有在示例数据中指定两次更新之间的等待时间,但我怀疑这太短了。
由于DS的类型为COUNTER,因此您需要有两个完整的时间窗口,才能使RRA每秒更新增量值。由于您的更新不太可能完全在窗口边界上,因此这意味着您需要3个样本。由于步数为300,这意味着每个样本之间需要5分钟的延迟。
您的数据正在单调增加,因此它似乎适合于COUNTER,尽管每秒的速率非常小。
确保输入样品数据时出现延迟:
rrdtool updatev db/gas.rrd N:0
sleep 300
rrdtool updatev db/gas.rrd N:52
sleep 300
rrdtool updatev db/gas.rrd N:64
sleep 300
rrdtool updatev db/gas.rrd N:458
我希望它会在第三次更新后开始在RRA中显示一些值。
请注意,您在RRA定义中使用了较高的XFF,因此粒度较低的RRA更有可能隐藏丢失的数据。