альтернативный инструмент rrd для больших объемов работ

StackOverflow https://stackoverflow.com/questions/605251

Вопрос

Мне интересно узнать, есть ли какая-либо альтернатива rrdtool для регистрации данных временных рядов.Я смотрю на что-то, что может масштабироваться для мониторинга большого количества устройств.

Из того, что я прочитал на эту тему, rrdtool привязан к вводу-выводу, когда вы загружаете в него большие объемы данных.Поскольку я предполагаю, что это будет масштабироваться до очень большого количества устройств для мониторинга, мне любопытно, есть ли какая-либо альтернатива, которая не ограничивала бы ввод-вывод.Предпочтительнее на основе SQL, но не обязательно.

Спасибо

Это было полезно?

Решение

Если производительность ввода-вывода является главной проблемой, то вы хотите изучить что-то вроде rrdcached который доступен в текущей версии (1.4) RRDTools.

Накладные расходы на ввод-вывод не зависят от записываемых данных, в конце концов, каждое значение составляет 8 байт на источник данных.Пропускная способность ввода-вывода обусловлена тем фактом, что перед записью необходимо прочитать целый сектор (обычно 4k).Внезапно, чтобы записать 8 байт, вы прочитали / записали 8 тысяч байт.

rrdcached объединяет все эти записи вместе, поэтому при обновлении RRD соотношение полезных данных (фактических значений DS) к потерянным данным (запасные байты в секторе) уменьшается.

Все RRDTools будут автоматически работать с rrdcached, когда обнаружат, что он запущен (через переменную окружения).Это позволяет им запускать сбросы при необходимости, например, при создании графика на основе данных.

Хотя переход на решение на основе SQL может помочь учесть дополнительные операции ввода-вывода, которые потребуются для поддержки SQL.Учитывая, что вы не склонны использовать RRD-данные в таком режиме произвольного доступа, база данных является чем-то вроде кувалды для решения этой проблемы.При использовании RRDTool сохранится доступ ко всей экосистеме инструментов, которые понимают файлы и могут с ними работать, что особенно полезно, если вы с ними уже знакомы.

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

Существуют некоторые базы данных временных рядов, целью которых является высокая доступность и / или масштабируемость.

Может быть, взглянете на

  • rrdcached, слой кэширования поверх rrd
  • Whisper, механизм базы данных , стоящий за графит
  • opentsdb представляет собой распределенную масштабируемую базу данных временных рядов (TSDB), написанную поверх HBase
  • разведчик хотя он больше сосредоточен на мониторинге

Мой друг некоторое время назад проделал некоторую работу над серверной частью SQL для хранения циклических данных: http://rrs.decibel.org

Однако я подозреваю, что, поскольку вы спрашиваете об "устройствах для мониторинга", возможно, вы ищете более полное решение.

Если количество операций ввода-вывода в секунду является вашим основным узким местом, и вы используете Linux, есть простой способ взлома, который только отнимет у вас память.Используйте монтирование tmpfs для промежуточной записи RRD.

Все операции ввода-вывода будут выполняться в памяти и не повлекут за собой каких-либо узких мест, встречающихся при выполнении дискового ввода-вывода (это даже быстрее, чем использование твердотельных дисков).Затем вы можете использовать задание cron и rsync для копирования только измененных RRD'ов на диск раз в несколько минут.


Создайте каталоги

bash-4.2# mkdir /mnt/rrd-reads
bash-4.2# mkdir /mnt/rrd-writes

Создайте файловую систему с максимальной оперативной памятью 500 МБ с соответствующими опциями

bash-4.2# mount -t tmpfs -o size=500m,mode=0750,uid=collectd,gid=collectd none /mnt/rrd-writes
bash-4.2# echo "none /mnt/rrd-writes tmpfs size=500m,mode=0750,uid=collectd,gid=collectd 1 2" >> /etc/fstab

Скопируйте старые файлы RRD в новую точку монтирования

bash-4.2# cp -a /var/lib/collectd/rrd/* /mnt/rrd-writes

Настройте ваше приложение, пишущее rrd, на запись в новую точку монтирования

bash-4.2# sed -i -e 's/DataDir "\/var\/lib\/collectd\/rrd"/DataDir "\/mnt\/rrd-writes"/' /etc/collectd/collectd.conf

Настройте задание cron так, чтобы синхронизировать на диск только измененные RRDS-файлы один раз в 2 минуты

bash-4.2# echo "*/2 * * * * collectd rsync -a /mnt/rrd-writes/* /mnt/rrd-reads/ ; sync" > /etc/cron.d/rrd-sync

Не забудьте скопировать сохраненные файлы RRD в точку монтирования до того, как вы запускаете свое приложение для написания rrd-кода!Возможно, вам потребуется отредактировать скрипт инициализации для этой службы, чтобы убедиться в наличии файлов перед ее запуском.Если он запустится без файлов на месте, будут созданы новые пустые файлы, и вы будете очень сбиты с толку, как только прочитанный каталог будет перезаписан пустыми RRDS.

Если в какой-то момент вам потребуется изменить размер монтирования tmpfs, вы можете сделать это на лету:

bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top