如何让 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 及更高版本。
说,我正在将值写入数据库,然后停止这样做,现在我想继续从当前时间点开始。据我所知,如果我无法在 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 及更高版本。