Как я могу обновить данные с помощью RRDtool?

Я использую 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)

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
11 124
3

Ответы 3

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

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

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

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

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

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

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

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

Другие вопросы по теме