如何让 rrdtool 从任意时间点重新开始?

How to make rrdtool start over from some arbitrary point in time?

说,我正在将值写入数据库,然后停止这样做,现在我想继续从当前时间点开始。据我所知,如果我无法在 heartbeat 秒内写入内容,它会停止写入数据库:

#!/usr/bin/env bash
set -eu
DIR=$(dirname -- "$(readlink -f -- "${BASH_SOURCE[0]}")")
SCRIPT=$(basename -- "$(readlink -f -- "${BASH_SOURCE[0]}")")

start=1420729200
echo start: $start $(date -d @$start)
rrdtool create "$DIR/1.rrd" \
    --start "$start" \
    --step 300 \
    DS:g:GAUGE:600:U:U \
    RRA:MAX:0.5:1:10
rrdtool update "$DIR/1.rrd" $(( start + 601 )):111
rrdtool dump "$DIR/1.rrd"

我做错了什么? heartbeat 到底是什么?我认为它定义了有多少相邻输入值用于插值 PDP 值。我错过了什么?

UPD 如果我使用 $start 时间戳值执行 update,我得到:

ERROR: /home/yuri/_/1.rrd: illegal attempt to update using time 1420729200 when last update time is 1420729200 (minimum one second step)

所以它适用于 $(( start + 1 ))$(( start + 600 )),包括两端。当我使用 $(( start + >600 )).

进行更新时,我没有收到错误消息

对 RRD 数据库的两次更新间隔不得超过 HEARTBEAT 秒。或者 rrdtool 将忽略您的更新。它只会将更新注册为新的起点,如果下一次更新在 HEARTBEAT 秒内,该值将出现在数据库中:

rrdtool update "$DIR/$SCRIPT.rrd" $(( start + 601 )):111   # new starting point
rrdtool update "$DIR/$SCRIPT.rrd" $(( start + 900 )):222   # gets into database

在 rrdtool 1.4.9 和更新版本中,更新前的最后 HEARBEAT 秒将被视为有效数据,如果您有 GAUGE 类型的数据源,这将起作用。如果您的心跳为 500 秒并且您在 900 秒后提供更新,则 rrdtool 将认为数据在最后 500 秒内有效。如果步长是 300 秒,您将得到 2 个未知步长和 1 个已知步长……但正如我所说,这仅适用于 1.4.9 及更高版本。