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

时间:2015-01-08 16:00:36

标签: bash rrdtool rrd

说,我正在向数据库写入值,然后停止这样做,现在我想继续从当前时间点开始。据我所见,如果我在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 如果我使用update时间戳值$start,我会得到:

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 ))更新时,我不会收到错误。

1 个答案:

答案 0 :(得分:1)

对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类型的数据源,这将有效。如果您的心跳是500s并且您在900s之后提供更新,rrdtool将认为数据在过去500秒内有效。如果步长为300秒,您最终会得到2个未知步骤和一个已知步骤......但正如我所说,这只是在1.4.9及更高版本中。