Как я могу обновить данные с помощью RRDtool? - PullRequest
5 голосов
/ 30 ноября 2008

Я использую RRDtool для хранения данных для отображения графиков. Я обновляю RRD с помощью RRDs :: update, и это не удается при попытке перезаписать информацию, что означает обновление данных за некоторое время в прошлом (например, кто-то перенес системный таймер назад). Я получаю ошибку:

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)

Я хочу всегда разрешить перезапись, как я могу это сделать?

Ответы [ 3 ]

4 голосов
/ 20 июля 2012

rrdtool не записывает ваш ввод в rrd файл. Это скорее образец того, что вы вводите, а затем сохраняет результирующие точки данных. Таким образом, предоставление «старых данных» для обновления rrdtool не будет работать таким же образом, так как вы не можете легко пропустить запись звука, чтобы «исправить» несколько плохих заметок.

Очевидно, что есть способы изменить старые данные, способ сделать это в rrdtool - «сбросить» rrd-файл в xml, изменить содержимое и «восстановить» его. Не то, что хочется делать регулярно.

3 голосов
/ 25 июля 2012

Я использую следующий скрипт в таких ситуациях:

#!/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"

Это немного ... странно, но я не смог найти другое автоматическое решение.

1 голос
/ 30 ноября 2008

Согласно документации RRD, эта отметка времени должна увеличиваться с каждым обновлением. Учитывая ваши ограничения, я бы изменил вашу процедуру обновления так, чтобы в случае сбоя обновления вы ловили исключение и повторяли обновление с полем времени, установленным в «N». Это заставит RRDtool использовать текущее время в качестве времени обновления.

В качестве альтернативы, если вы не хотите иметь дело с кодом перехвата и повторения, просто измените свой код обновления, чтобы всегда использовать «N» в качестве значения времени - тогда обновление всегда будет работать.

Может быть полезно быстро взглянуть на документацию для команды обновления RRDtool .

...