【问题标题】:Updating rrdtool database更新 rrdtool 数据库
【发布时间】:2017-11-06 07:05:40
【问题描述】:

我在这里的第一篇文章,所以我希望我没有太冗长。 我发现我丢失了数据点,因为我的 rrdtool 配置中只有 10 行,并且想要使用旧数据从备份源文件进行更新。 修复行数后,创建配置:

rrdtool create dailySolax.rrd \
--start 1451606400 \
--step 21600 \
 DS:toGrid:GAUGE:172800:0:100000 \
 DS:fromGrid:GAUGE:172800:0:100000 \
 DS:totalEnerg:GAUGE:172800:0:100000 \
 DS:BattNow:GAUGE:1200:0:300 \
 RRA:LAST:0.5:1d:1010 \
 RRA:MAX:0.5:1d:1010 \
 RRA:MAX:0.5:1M:1010

而python中的更新行是

newline = ToGrid + ':' + FromGrid + ':' + TotalEnergy + ':' + battNow
UpdateE = 'N:'+ (newline)
print UpdateE
try: 
    rrdtool.update(
    "%s/dailySolax.rrd" % (os.path.dirname(os.path.abspath(__file__))),
    UpdateE)

这对于输入原始数据(来自 crontabbed 网站抓取)都很好,但正如我所说,我丢失了数据并想添加回早期的数据点。 从我的备份源中,我有一个纯文本文件,其中的行看起来像

1509386401:10876.9:3446.22:18489.2:19.0
1509408001:10879.76:3446.99:18495.7:100.0

第一个字段是时间戳。然后使用此代码读取更新的行:

with open("rrdRecovery.txt","r") as fp:
    for line in fp:
        print line
## newline = ToGrid + ':' + FromGrid + ':' + TotalEnergy + ':' + battNow
    UpdateE = line
    try: 
        rrdtool.updatev(
        "%s/dailySolax.rrd" % (os.path.dirname(os.path.abspath(__file__))),
        UpdateE)

当它不能与当前版本的数据库的副本一起正常工作时,我在使用相同配置创建的空数据库上再次尝试。 在每种情况下,更新仅导致数据库中的时间戳数据,而没有来自其他字段的数据。 Python 没有抱怨,我期待

1509386401:10876.9:3446.22:18489.2:19.0

会和之前一样更新

N:10876.9:3446.22:18489.2:19.0

转储显示所有字段的 lastupdate 数据,但随后显示的是 rra 数据库

<!-- 2017-10-31 11:00:00 AEDT / 1509408000 --> <row><v>NaN</v><v>NaN</v><v>NaN</v><v>NaN</v></row>

不确定我是否有 python 问题 - 更可能是 rrdtool 理解问题。感谢您的任何指点。

【问题讨论】:

    标签: python-2.7 rrdtool


    【解决方案1】:

    您遇到的问题是 RRDTool 时间戳必须增加。这意味着,如果您增加 RRA 的长度(回到过去),您不能将数据直接放入这些点 - 只能随着时间的增加将新数据添加到末尾。此外,当您创建新的 RRD 时,“上次更新”时间默认为现在。

    如果您有之前时间戳的日志,那么您应该能够添加此历史记录,只要您在完成之前不进行任何“现在”更新。

    首先,创建 RRD,其“开始”时间早于第一次历史更新。

    然后,使用适当的时间戳按时间顺序处理所有历史更新。

    最后,您可以开始定期进行“现在”更新。

    我怀疑发生的事情是您在运行所有历史数据输入之前让您的常规 cronjob 添加了新数据 - 或者您创建的 RRD 的开始时间在您的历史时间戳之后。

    【讨论】:

    • 感谢您的回复。似乎我上面的一些问题来自使用连续的 RESIZE 命令,例如1755 rrdtool resize scripts/dailySolax.rrd 0 GROW 1000 1756 rrdtool resize scripts/dailySolax.rrd 1 GROW 1000 1757 rrdtool resize scripts/dailySolax.rrd 2 GROW 1000 没有正确增加所有 RRA 的行数。但是现在当我创建一个新的 RRD 并运行我的 python 脚本时,它不会更新第四个数据字段。
    • 当我使用 :rrdtool update dailySolaxTemp.rrd 1508371201:10740.95:3430.97:18259.2:58.0 时,它会做同样的事情,并且“58.0”在 rrd 中变为“NaN”。如果我在更新行中有错误,我看不到它。
    • 好的,我对 rrd 参数进行了调整,现在我收到一条错误消息,提示我有一些换行符或 CR 字符导致问题。
    • 所以我的行 UpdateE = line 必须是 UpdateE = line.replace("\n", "") 才能删除换行符,然后脚本更新才能工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多