【发布时间】:2016-06-29 06:31:29
【问题描述】:
我想将 rrdtool 用作环形缓冲区,如果新值到达并且 RRA 已满,它只会忘记最旧的值。 这甚至可能吗?
例子:
rrdtool create database.rrd --step 1 DS:data1:GAUGE:5:U:U RRA:<CF>:0.5:1:1200
20 分钟后,最旧的值被替换。
谢谢你的问候,
彼得
【问题讨论】:
我想将 rrdtool 用作环形缓冲区,如果新值到达并且 RRA 已满,它只会忘记最旧的值。 这甚至可能吗?
例子:
rrdtool create database.rrd --step 1 DS:data1:GAUGE:5:U:U RRA:<CF>:0.5:1:1200
20 分钟后,最旧的值被替换。
谢谢你的问候,
彼得
【问题讨论】:
您可以使用 AVG 类型的 1 步 RRA 将 consolodation 函数渲染为 null,如您的示例所示。
但是,您不能简单地取消时间序列和数据规范化。
您的数据需要准确地到达一个步骤边界,否则它们将被调整以适应一个,从而改变它们的值。您的示例使用 1s 步骤,这使得这更加简单;然而它带来了下一个问题......
RRDTool 将始终在每个合并步骤将值存储在 RRA 中。如果没有可用的数据,那么您将得到一个未知数,或者将根据以前的数据推断出一个值。在您的设置中,您有一个 XFF=0.5,这意味着当没有存储数据时您会得到一个未知数。
所以,这是可能的,但 RRA 中总是有 1200 个值。如果样本在特定秒内没有到达,则将存储一个未知数。无论在该时间窗口内收集了多少新样本,样本将在 20 分钟后立即丢弃;当您查询 RRA 时,如果在那一秒内没有收集任何内容,您将得到“未知”。
此行为是否符合您的用例要求取决于您。
【讨论】:
rrdtool update $file.rrd $value:`date +%s`,以便将其存储为整数时间,以避免数据规范化。