我用一个DS创建了一个RRD,这是一个脚本的处理时间,步长为10分钟。有三个档案,以MAX作为聚合函数:一周内的所有值,一个月内的每小时,两年内的每一天。
rrdtool create RRD --start 1411561343 --step 600s
DS:processtime:GAUGE:1200:0:U
RRA:MAX:0.5:1:1008
RRA:MAX:0.5:6:744
RRA:MAX:0.5:144:732
我从一个文件中填充它,该文件包含从2014/09/24 14:32:23(1411561943)到2016/01/11 11:07:25(1452503245)的所有记录。最大值为2015/09/11 14:18:35(1441973915),23340。
当我绘制或转储rrd时,我有很多NaN,我没有看到这个最大值,也没有看到很多其他有效值。我在rrd中的最大值是<!-- 2015-08-06 02:00:00 CEST / 1438819200 --> <row><v>8.0004250000e+02</v></row>
。
这与间隔时间不是10分钟而是8到12分钟这一事实有关吗?
如果是这样,有没有办法改变这种行为?
首先rrdtool将数据重新采样到--step
中的给定间隔,然后才会对数据进行进一步处理。间隔与历元时间戳对齐(从1970-01-01 00:00:00 GMT开始)。如果您想在更短的时间间隔内获得最大值,则必须降低步长并更频繁地输入数据。
正如Tobi提醒您的那样,无论样本何时到达,您的样本都将首先进行标准化/重新采样,间隔10分钟。除非在时间间隔边界上准确插入数据,否则无法禁用此行为。
你的最大值可能不是你认为的间隔。
RRA:MAX:0.5:1:1008
RRA:MAX:0.5:6:744
RRA:MAX:0.5:144:732
您的RRA适用于1、6和144个样本。由于您的间隔为10分钟,这些RRA分别对应于10分钟、1小时和1天,并将在该间隔内保持最大值的归一化样本。
此外,XFF为0.5,这意味着RRA必须存在50%以上的所需样本才能存储值,DS上的心跳为20min,这意味着您不知道是否存在如此长的间隔。
您可能想添加一个RRA:AVG:0.5:1:1008
以供参考,这样您就可以验证正在收集的数据并追踪NaN
的来源。
请注意,在绘制图形或使用xport时,如果覆盖整个请求时间窗口的适当RRA不可用,rrdtool将根据可用数据计算动态最大值。
您可以使用如上所述的AVG RRA来验证MAX计算,并获取此预聚合数据以与存储在MAX RRA中的值进行比较。