我正在读取我的能量计输出以跟踪实际使用的能量等。能量成本是用tarif计算的,并且在白天从一个状态变为另一个状态(1或2)。当我将tarif与实际使用情况一起绘制时,tarif状态的尖锐边缘变得锯齿状,可能是由平均值引起的。
我使用过DS:tarif:GAUGE:...设置数据库,我使用DEF:tarif:xx.rrd:tarif:AVERAGE to graph。
如何录制和绘制"数字"信号有尖锐的边缘?
答案 0 :(得分:1)
你可能会在这里提到两件事。
首先,确保您没有使用--slope-mode
。此选项使用斜率而不是图中的步骤;这听起来像是错误的选择。
接下来,您遇到的问题是tariff
DS在两个值之间变化(比如a
和b
),但是当您查看更高级别的图表时,开始平均,看起来不对劲。
在查看高粒度(IE,特写)图时,每个RRA数据点有一个(或更多)像素,每个RRA数据点有一个样本。因此,您会看到a
或b
。但是,当您向上移动到较低粒度(IE,更远)图表时,RRDtool将开始每个像素具有多个数据点。根据您的RRD文件定义,rrdtool将随时进行组合,或者使用不同的RRA,每个数据点使用更多样本。
因此,这意味着每个像素有多个样本,并且它们需要以某种方式组合。默认情况下,RRDTool将对它们进行平均,这可能导致锯齿状行为。
但是,你想要发生什么?如果对应于单个像素的时间间隔有2个a
个实例和3个b
个实例,那么该图表应显示什么?
以下是关于如何做到这一点的几点建议。
由于您的关税只有两个值,您可以使用它来为背景着色 - 例如,根据关税制作红色或绿色背景,然后在此顶部绘制使用图线。背景颜色可以通过使用像inf
#ff808080
的区域来完成
也许您只想显示该期间的最高关税。因此,您可以为每个组合间隔创建一个额外的MAX类型RRA,并绘制MAX图形。当然,这意味着当你有1个像素= 1天时,你会看到更高的值作为一条直线。我想一个中位数' consolodation在这里很有用,但由于显而易见的原因,RRDTool没有这个。
大图表意味着更多像素,这意味着需要更少的平均值。
你想要想象什么?可能你不需要在这个时间窗口内看到每个单位的平均成本,计算的单位x关税总和会更好 - 特别是因为这可以平均没有问题。
RRDTool旨在逐步对常规时间序列数据进行标准化,汇总和过期,并且非常有效。但是,如果您对永久拥有确切数据感兴趣,那么您可能需要一个不同的数据库。
如果您的数据经常更改,那么数据规范化可能会改变它们。确保始终将数据存储在时间步边界 - 如果您的RRD步长为300(5分钟),则确保将数据存储在300的倍数的时间戳上,并且不要使用N
(意思是“现在不管是什么时候”。
答案 1 :(得分:0)
感谢您提供非常精细的答案。因为我无法找到适合我的问题的答案,你的总结和我的情况,也可能有助于其他人。
回顾过去,我应该提供更多信息,在解决你的观点之前,让我现在就这样做:
以下是我的数据库定义脚本的片段:
# 5 min sample rate = 300 step rate
# 1D report: 1 step every 5 minutes (5 min sample rate=1), 20 per hr, 24hrs = 480 slots
# 1Wk report: 1 step every hour (20 x 5 min samples=20), 24 hrs, 7 days = 168 slots
# 1M report: 1 step every hour (20 x 5 min samples=20), 24 hrs, 30 days = 720 slots
# 1Y report: 1 step every day (24 Hr * 20 samples=480), 365 days = 365 slots
rrdtool create energy_mon.rrd --step 300 --start 1480943366 \
DS:meter_total:COUNTER:600:U:U \
DS:meter_low:COUNTER:600:U:U \
DS:meter_hi:COUNTER:600:U:U \
DS:energy:GAUGE:600:U:U \
DS:tarif:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:480 \
RRA:AVERAGE:0.5:20:168 \
RRA:AVERAGE:0.5:20:720 \
RRA:AVERAGE:0.5:480:365
以下是我的图表脚本的片段:
#daily
rrdtool graph $GDIR/energy_daily.png --start -1d \
-w 675 -h 250 \
--vertical-label "KWatt" \
--lower-limit=0 \
--watermark "`date`" \
DEF:energy=$DIR/energy_mon.rrd:energy:AVERAGE \
LINE1:energy$GREEN_COLOR:"Energie" \
DEF:tarif=$DIR/energy_mon.rrd:tarif:AVERAGE \
LINE1:tarif$BLACK_COLOR:"Tarief"
#two days
rrdtool graph $GDIR/energy_2days.png --start -2d \
-w 675 -h 250 \
--vertical-label "KWatt" \
--lower-limit=0 \
--watermark "`date`" \
DEF:energy=$DIR/energy_mon.rrd:energy:AVERAGE \
LINE1:energy$GREEN_COLOR:"Energie" \
DEF:tarif=$DIR/energy_mon.rrd:tarif:AVERAGE \
LINE1:tarif$BLACK_COLOR:"Tarief"
以下是“1天”结果的图表: 1 day 这是“最后48小时”的图表: 2 day
为了在图表上看到我的“tarif”以及KWatts中的实际能量使用,我将1(低)或2(正常)设置乘以100并将该数字存储在数据库中。在工作日,关税在23:00变为“低”,并在07:00恢复正常。在“每日”图表中,这是正确报告的,尽管是5分钟。样本分辨率“错误”。
如您所见,图形说明中“-2d”设置的“最后48小时”应该使用来自数据库的相同RRA数据,但tarif行不会从100切换到200,但是“坐在大约一半左右。 1-1 / 2小时,或超过30个样本。这不是基于像素级分辨率(;-)的舍入。
我目前唯一的解释是“-2d”图使用第二个RRA,实际上是用于一周的数据。如果这是答案,那么如何影响绘图指令中的“-d / w / m / y”设置与预期的RRA之间的关系?我没有看到两者之间的联系,所以它可能是自动选择的,并且最有可能(如果它那么聪明)基于数据点的数量。第一个RRA没有足够的,所以它切换到使用第二个RRA。看似合理,但这是真的吗?
BTW,对于我使用的其他图表使用“-1w”,“ - 1m”和“-1y”,在tarif“信号上显示相同的奇怪结果。
与此同时,我已经能够“修复”图形,而无需通过添加CDEF来重新定义我的数据库。这是我用于除“1d”以外的所有图形的内容。
DEF:tarif=$DIR/energy_mon.rrd:tarif:AVERAGE \
CDEF:normaal=tarif,100,GT,200,100,IF \
LINE1:normaal$BLACK_COLOR:"Tarief"
解释CDEF,如果关税是> 100(或实际上1 =低),将结果设置为“normaal”,这是高关税。如果没有,将关税设置为“dal”或低。
您使用背景颜色进行关税的建议是非常好的,因为我可以在当前数据库中使用它,我也尝试过。
你的MIN / MAX解决方案也是如此,我之前考虑过这个问题,但是因为这需要设置一个新数据库并用之前的数据填充它。 (我以.csv形式出现,之前我经历过那种乏味的练习 - 这就是为什么我在rddtool中创建了--start)
但是,我想谈谈这个问题的底部。 您或其他任何人是否有更多的智慧之词可以分享或验证/解释RRA的工作< ==> DEF关系还是选择?