6

グラフを表示するためのデータを格納するために RRDtool を使用しています。RRDs::update で RRD を更新しましたが、情報を書き換えようとすると失敗します。これは、過去の時間のデータを更新することを意味します (たとえば、誰かがシステム タイマーを元に戻しました)。私が得るエラーは次のとおりです。

ERROR: Cannot update /opt/dashboard/rrd/Disk/192.168.120.168_disk_1.rrd with 
'1228032301:24:24' illegal attempt to update using time 1228032301 when last 
update time is 1228050001 (minimum one second step)

常に書き換えを許可したいのですが、どうすればよいですか?

4

3 に答える 3

4

このような状況では、次のスクリプトを使用します。

#!/bin/sh
rrdtool dump "$1" | perl -ne 'BEGIN {$t=`date +%s`; chomp($t);} $a=$_; if ($a =~ /lastupdate.\d+..lastupdate/) { $a =~ s/(lastupdate.)\d+(..lastupdate)/$1$t$2/; } print $a' | rrdtool restore -f - "$1"

それは少し...気紛れですが、私は別の自動解決策を見つけることができませんでした。

于 2012-07-25T08:44:47.327 に答える
4

rrdtool は入力を rrd ファイルに書き込みません。入力内容をサンプリングし、結果のデータポイントを保存します。そのため、rrdtool update に「古いデータ」を提供しても、同じようには機能しません。サウンド レコーディングを簡単にスキップして、いくつかの悪い音を「修正」することができないからです。

明らかに、古いデータを変更する方法があります。rrdtool でこれを行う方法は、rrd ファイルを xml に「ダンプ」し、内容を変更して「復元」することです。定期的にやりたいことではありません。

于 2012-07-20T06:32:16.237 に答える
1

RRDのドキュメントによると、そのタイムスタンプ番号は更新のたびに増加する必要があります。制約がある場合は、更新ルーチンを変更して、更新が失敗した場合に例外をキャッチし、時間フィールドを「N」に設定して更新をやり直すようにします。これにより、RRDtoolは現在の時刻を更新時刻として使用します。

または、キャッチアンドリトライコードを処理したくない場合は、更新コードを変更して、時間値として常に「N」を使用するようにします。そうすれば、更新は常に機能します。

RRDtoolupdateコマンドのドキュメントをざっと見ておくと役立つ場合があります。

于 2008-11-30T13:42:26.663 に答える