簡體   English   中英

如何使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類型的數據源,則該數據將起作用。 如果您的心跳為500s,並且您在900s之后提供更新,則rrdtool將認為該數據在最近500秒內有效。 如果該步長為300秒,那么您將最終得到2個未知步長和一個已知步長...但正如我所說的,這僅適用於1.4.9及更高版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM