当使用IF和UN将未知值设置为0时,rrd图中的最后一个值有时变为0

时间:2017-04-07 00:47:16

标签: rrdtool

我正在绘制一个包含多个rrd数据文件变量的图表。我还在图表上显示每个变量的最后一个值。当我使用时,例如“CDEF:A = a,UN,0,a,IF,8,”,然后在图表上打印变量A的最后一个值,取决于我加载图表的时间,最后一个即使rrd数据文件中的最后一个更新值不是0,A的值有时也会变为0.我正在使用rrdtool 1.4.8。当我使用“CDEF:A = a,8,”定义A时,这不会发生。

1 个答案:

答案 0 :(得分:0)

这是因为您使用了多个RRD文件,并且在更新和查询之间存在竞争条件。我已经看到这种情况发生在" Routers2"在MRTG数据上,该程序添加了特殊计算以避免它。

运行图表时,最终点基于当前时间。但是,我们当前所在的时间段可能尚未在其中一个源RRD文件中更新。

例如,假设数据每5分钟更新一次。

  • 在11:59,RRD文件A已更新,现在已完成11:55存储桶。
  • 在12:01,更新了RRD文件B,现在已完成12:00存储桶。
  • 在12:03,调用graph函数。图表的结尾设置为12:00,因为这是最新的可用数据。
  • 但是,对于RRD文件A,最新的可用数据是11:55,因为我们还没有更新12:04。因此,图表中的最后一个数据点是unknown

这就是为什么你偶尔会在一个数据集的末尾得到一个未知数。这意味着源数据的RRD在您当前所在的时间窗口结束时进行更新。

如果您没有针对未知的测试,则图表将不会显示相关点(因为未绘制未知点)。因此,如果你仔细观察,你会发现图中的线条早一个像素结束。

以编程方式避免此操作的一种方法是获取所有组件RRD文件的lastupdate时间,然后将最早的这些文件用作图表上的结束时间。这是routers2软件避免此问题的方式。