0

我刚刚开始使用 RRDtool 收集气候数据。我不使用图形功能,而是使用“获取”来检索数据。然后我使用另一个图形解决方案(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. 为什么不接受更新的值?
4

1 回答 1

1
  • 时隙 b 包含对 b 步有效的信息,直到 b 不包括 b 本身。因此,当询问从 3000000000 到 3000000900 的数据时,您得到的第一个条目是 3000000300。

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

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

于 2011-01-20T06:57:53.457 回答