一次性和无数据问题

时间:2010-12-30 10:58:59

标签: rrdtool rrd

我刚刚开始使用RRDtool来收集气候数据。我不使用图形功能,而是使用“fetch”来检索数据。然后我使用另一个图形解决方案(flot)来显示数据,这似乎有点奏效。但是我遇到了一些小问题,并决定检查更新和获取的细节,并且突然不确定事情是否符合我的预期。

所以我创建了一个小的shell脚本,用于创建数据库,在其中放入一个值,然后打印内容:

#!/bin/sh

RRD=test.rrd
STEP=300
HB=600

# Remove previous databse to be sure that
# old data does not affect the test
rm -f $RRD

# Create database
rrdtool create $RRD \
    --start 2999999999 --step $STEP \
    DS:a:GAUGE:$HB:U:U \
    RRA:AVERAGE:0.5:1:1000

# Do a single update
rrdtool update $RRD \
    3000000400:123

# Fetch data and print to stdout
rrdtool fetch $RRD \
    --start 3000000000 --end 3000000900 AVERAGE

我希望这会打印三个(或者四个,不确定最后一个)这样的值:

3000000000: -nan
3000000300: 123
3000000600: -nan
3000000900: -nan

但这就是我得到的:

3000000300: -nan
3000000600: -nan
3000000900: -nan
3000001200: -nan

所以我有三个问题:

  1. 为什么fetch命令从300开始,而不是0?
  2. 为什么fetch命令不仅包括最后一步(900)还包括一个(1200)?
  3. 为什么没有接受更新的值?

1 个答案:

答案 0 :(得分:1)

  • 时间段b包含对b步骤有效的信息,直至b EXCLUDING b本身。因此,当询问3000000000到3000000900的数据时,您得到的第一个条目是3000000300。

  • 由于您要求数据以3000000900结尾,您将获得3000001200的条目以及3000000900本身是此条目的开头。

  • 目前即使在仪表模式下你也必须有一个已知值才能开始......所以你的第一个已知更新只会让你回到已知状态,它还没有建立任何其他状态。有人可能会说,在GAUGE模式下,可以采用不同的方式。