有人能向我解释一下这个 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 中显示)
谢谢。
答案1
这就是 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
那里的字段是它用来保存在达到下一步边界时可以使用的时间加权总数的中间值。这是一种使聚合工作更快的优化。