我正在读取我的能量表输出,以跟踪实际使用的能源,等等。能源成本是用tarif计算的,它在一天中从一个状态变化到另一个状态(1或2)。当我将tarif与随时间变化的实际使用量一起绘制在一起时,tarif状态的锐边变得参差不齐,这可能是由平均引起的。
我已经使用了DS:tarif:GAUGE:...来设置数据库,我正在使用DEF:tarif:xx.rrd:tarif:AVERAGE来绘图。
如何记录和绘制具有锐边的“数字”信号?
发布于 2016-12-28 04:16:34
这里你可能指的是两件事。
首先,确保您没有使用--slope-mode
。此选项在图形中使用坡度而不是步长;这听起来对您来说是错误的选项。
接下来,您会遇到tariff
DS在两个值(假设是a
和b
)之间变化的问题,但是当您查看更高级别的图时,这会开始取平均值并看起来是错误的。
查看高粒度(IE,close up)图时,每个RRA数据点有一个(或多个)像素,每个RRA数据点有一个样本。因此,您将看到a
或b
。但是,当您向上移动到较低粒度(IE,更远)的图形时,RRDtool将开始具有每个像素的多个数据点。根据您的RRD文件定义,rrdtool将在运行时进行整合,或者使用不同的RRA,每个数据点具有更多的样本。
因此,这意味着每个像素有多个样本,它们需要以某种方式组合在一起。默认情况下,RRDTool将对它们进行平均,这可能会导致行为参差不齐。
然而,你希望发生什么呢?如果对应于单个像素的时间间隔有2个a
实例和3个b
实例,那么图形应该显示什么?
这里有一些关于如何做到这一点的建议。
由于您的资费只有两个值,您可以使用它来给背景着色-例如,根据资费设置一个红色或绿色的背景,然后在上面绘制您的使用图形线。背景颜色可以通过使用像#ff808080
这样的半透明颜色从0到inf
的区域来实现
也许您只想显示该时段的最高资费。因此,您可以为每个合并间隔创建一个额外的MAX类型RRA,并用图形表示MAX。当然,这意味着当你有1个像素=1天时,你会看到更高的值作为一条直线。我想“中位数”调整在这里会很有用,但原因很明显,RRDTool没有这个功能。
一个大的图形意味着更多的像素,这意味着需要更少的平均。
你想要想象什么?您可能不需要查看此时间窗口内每个单位的平均成本,而计算出的单位x关税总和会更好-特别是因为这将能够毫无问题地平均起来。
RRDTool旨在随着时间的推移逐步标准化、汇总和过期定期时间序列数据,并且非常有效。然而,如果你有兴趣永远拥有准确的数据,那么你可能需要一个不同的数据库。
(采样时间和采样时间)
如果您的数据频繁更改,那么数据规范化可能会更改它们。确保你总是在时间步长边界上存储数据-如果你的RRD步长是300 (5分钟),那么确保你在时间戳上存储数据,这是300的倍数,并且不要使用N
(意思是‘不管现在是什么时间’)。
发布于 2016-12-29 17:01:54
谢谢你的这个非常详细的回答。因为我找不到合适的答案来解决我的问题,你的总结和我的情况,希望也能帮助其他人。
回过头来看,我应该包括更多的信息,在讨论您的观点之前,让我现在就这样做:
下面是我的数据库定义脚本的一段代码:
# 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恢复正常。在"daily“图表上,这是正确的报告,尽管有5分钟。示例分辨率“错误”。
正如您所看到的,在绘图说明中由"-2d“设置的”最后48小时“应该使用来自数据库的相同RRA数据,但tarif线不会从100切换到200,而是”坐“在大约一半的位置。1-1/2小时,或超过30个样本。这不是基于像素级别分辨率(;-)的舍入。
目前我唯一的解释是,"-2d“图使用了第二个RRA,这实际上是为了一周的数据。如果这是答案,那么如何影响绘图说明中的"-d/w/m/y“设置与预期的RRA之间的关系?我看不到两者之间的联系,所以它可能是自动选择的,并且最有可能(如果它是那么智能的话)基于数据点的数量。第一个RRA没有足够的,因此它切换到使用第二个RRA。看似合理,但这是真的吗?
顺便说一句,对于我使用的其他图形,使用"-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=low),则将结果设置为"normaal“,这是高关税。如果没有,请将关税设置为"dal“或”low“。
您的建议使用背景颜色的关税是一个非常好的建议,因为我可以使用它在当前的数据库,我也尝试过。
你的MIN/MAX解决方案也是如此,我之前考虑过,但后来推迟了,因为这将需要建立一个新的数据库,并用以前的数据填充它。(我在.csv表单中有,并且我以前已经经历过这个繁琐的练习--这就是为什么我在rddtool创建中有--开始)
但是,我想要弄清楚这个问题的真相。您或其他任何人还有更多的智慧之语要分享,或者可以验证/解释RRA <==> DEF关系或选择的工作原理吗?
https://stackoverflow.com/questions/41327683
复制相似问题