有人可以向我解释这个 RRD 中的 ds[fan_speed].value 字段吗?
rrdtool 信息给出:
rrd_version = "0003"
step = 300
last_update = 1360341382
ds[fan_speed].type = "GAUGE"
ds[fan_speed].minimal_heartbeat = 600
ds[fan_speed].min = 0.0000000000e+00
ds[fan_speed].max = 1.0000000000e+02
ds[fan_speed].last_ds = "60"
ds[fan_speed].value = 4.9200000000e+03 ********* ???
ds[fan_speed].unknown_sec = 0
...
rra[2].cf = "AVERAGE"
rra[2].rows = 700
rra[2].cur_row = 295
rra[2].pdp_per_row = 6
rra[2].xff = 5.0000000000e-01
rra[2].cdp_prep[0].value = 6.0000000000e+01
rra[2].cdp_prep[0].unknown_datapoints = 0
(在“PDP 状态”中使用“rrdtool dump”显示相同的值。)
它是什么?
(通常,此设备上的风扇为 60(%),例如在 rra[2].cdp_prep[0].value = 6.0000000000e+01 中显示)
谢谢。
这就是 RRD 跟踪步长周期的时间调整值的方式。
您最后一次存储值 60,时间为 1360341382。您的步长为 300,因此您最后一次 RRD 聚合时间为 1360341300,即 82 秒前。您之前的值也可能是 60,考虑到您所说的这些风扇速度有多恒定,因此 RRD 认为,由于您之前存储了 60,并且您在 1360341382 存储了 60,因此在 1360341300 和 1360341382 之间的 82 秒内,该值始终为60。
60 * 82
是4920,您看到的存储值。RRD 为什么要这样做?好吧,如果它想知道这 82 秒周期的平均值是多少,它所要做的就是将该值除以秒数得到 60。如果你稍后出现,在 1360341464(82 秒后使数学简单)并存储值 50,RRD 将添加
55 * 82
(55,因为它认为这 82 秒周期的平均值在 60 和 50 之间)到这个值并存储它。现在,聚合期间的前 164 秒将有 9430。如果 RRD 想要显示 164 期间的平均值,只需将 9430 除以 164 即可得到 57.5。由于 RRD 在
step
边界上聚合,为了简化它的工作,它只是为聚合周期(在本例中为 300 秒)创建一个存储值。它将采用它在 300 秒期间保存的任何值并除以 300。这将是该步骤的平均值,这就是存储并用于更大聚合的值。那里的value
字段是它用来保存时间加权总数的中间值,它可以在到达下一步边界时使用。这是使聚合工作更快的优化。