使用 rrdtool RRD PDP 或 RRA 合并功能计算平均读数的差异?

Differences of using the rrdtool RRD PDP or RRA consolidation function to calculate the average reading?

我正在以 1 分钟的间隔更新 rrdtool 循环数据库。我想将五次更新的平均值作为一个 RRA 条目存储在 rrdtool RRD 中。一种方法是这样的:

$ rrdtool create foo.rrd --start 1000000500 --step 60 \
> DS:ping:GAUGE:120:0:1000 RRA:AVERAGE:0.5:5:12; \
> rrdtool update foo.rrd 1000000560:10 1000000620:20 \
> 1000000680:30 1000000740:40 1000000800:50

它累积五个读数并将它们的平均值存储为 RRA 中的条目。但是,可以用这个实现同样的效果:

$ rrdtool create bar.rrd --start 1000000500 --step 300 \
> DS:ping:GAUGE:600:0:1000 RRA:AVERAGE:0.5:1:12; \
> rrdtool update bar.rrd 1000000560:10 1000000620:20 \
> 1000000680:30 1000000740:40 1000000800:50

如上所示,step 是 300 秒,但由于 RRD PDP 接受间隔之间的值并计算平均值,因此两个示例都将 30((10+20+30+40+50)/5) 存储在 RRA 中。我可以说的一个区别是,第一个示例需要至少三个更新才能将条目存储到 RRA,而对于第二个示例,300 秒内的单个更新就足够了。还有其他区别吗?

这两个例子实际上并不是一回事,尽管在某些情况下它们可能看起来是一样的。

首先,你有一个 60s 的步长,你的 RRA 存储了每个 CDP 中 5 个 PDP 的平均值。

第二步,你有一个 300 秒的步骤,你的 RRA 将每个 PDP 存储为一个 CDP。

这里有一些区别:

  • 第一种,每2分钟至少需要一个样本(PDP);所以三个来涵盖 RRA 中的每个 CDP。在第二种情况下,每个 CDP 都需要一个样本。
  • 首先,每个样本的数据标准化发生超过 60 秒 window。在第二个中,它发生了 300 秒 window。这将使样本不定期到达时看起来不一样。
  • 第一个,你最多可以有 120 秒没有数据,然后才会得到一个 Unknown;第二个,最多 600 秒。

虽然两者的 RRA 结果几乎相同,但您选择哪种取决于传入数据的性质(您获取样本的频率、这些样本的不规则程度)以及您的存储和显示要求(如果您需要存储或显示更高的粒度)。如果您有频繁的样本,第一个选项更准确;第二个是更少的存储和更少的工作,但如果您的更新比这一步更频繁,可能会牺牲一些数据。

请注意,如果您有其他 RRA 类型而不仅仅是 AVG,则步长较小会使计算更准确。

一般来说,我建议您将步长设置为接近预期的平均采样频率,并根据数据的规律性设置延迟。根据您需要如何查看和显示数据,以及您需要保留历史记录多长时间,设置您的 RRA 合并。创建与正常显示汇总相对应的 RRA,以最大程度地减少即时计算量。