说,我正在向数据库写入值,然后停止这样做,现在我想继续从当前时间点开始。据我所见,如果我在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 ))
更新时,我不会收到错误。
答案 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及更高版本中。