RRDtool

RRDtool (сокращение от round-robin database tool) — открытый инструмент для обработки и хранения данных, зависящих от времени (например, температуры, загрузки процессора, сетевого трафика и других показателей). Хранит данные в базе данных типа round-robin с постоянным размером. Является развитием инструмента MRTG и включает средства для визуализации данных в виде графиков. В отличие от MRTG, RRDtool — это полноценная программная среда для архивирования и графического отображения данных, управление которой осуществляется скриптами через параметры командной строки. Благодаря этому достигается большая гибкость при построении графиков, однако отсутствие подробных ошибок может вызывать затруднения у неопытных пользователей. В RRDtool, в отличие от MRTG, отсутствует собственный SNMP-модуль для сбора сетевых данных.

Что важно знать

Процесс создания новой базы данных и графика

  1. Создание пустой базы данных с помощью rrdtool create
  2. С помощью скрипта или cron периодически добавлять данные в базу командой rrdtool update
  3. Формирование графика (обычно скриптом) командой rrdtool graph

Возможности

Создание базы данных

Функция create создаёт новый файл базы данных RRD. После создания база содержит неопределённые значения для всех точек данных.

Синтаксис создания базы данных:

rrdtool create filename 
[--start|-b start_time]
[--step|-s step]
[--no-overwrite]
DS:ds-name:DST:dst_arguments
RRA:CF:xff:steps:rows
  • filename — имя создаваемого файла (рекомендуется расширение .rrd).
  • --start (-b) — время первой записи (Unix-время с 1 января 1970, UTC). Если запись делается раньше, она будет проигнорирована. По умолчанию: текущее время минус 10 секунд.
  • --step (-s) — базовый временной интервал между данными, по умолчанию 300 секунд.
  • --no-overwrite — не перезаписывать уже существующий файл.
  • DS: — одна база RRD может хранить несколько источников данных (DS), например, входящий и исходящий трафик. Для каждой переменной задаются:
    • ds-name — имя (до 19 символов; латиница, цифры, подчёркивание).
    • DST — тип источника:
      • GAUGE, COUNTER, DERIVE, ABSOLUTE:
        • Пример: DS:ds-name:GAUGE|COUNTER|DERIVE|ABSOLUTE:heartbeat:min:max
        • GAUGE — значения фиксированных величин (температура, число людей и т. п.), записывается то, что задано.
        • COUNTER — разница между текущим и предыдущим значением (могут только расти, падение допускается при переполнении).
        • DERIVE — аналогично COUNTER, но возможны и отрицательные значения.
        • ABSOLUTE — оценка исключительно накопленных значений.
        • heartbeat — максимальное время (сек), в течение которого значение считается действующим; затем записывается UNKNOWN.
        • min и max — диапазон допустимых значений, при нарушении которых записывается UNKNOWN; если диапазон неизвестен — «U».
      • COMPUTE:
        • Пример: DS:ds-name:COMPUTE:rpn-expression
        • rpn-expression — формула для расчёта значения на основе других источников этой базы (аналог функции CDEF для graph).
  • RRA (round-robin archive) — определяет правило хранения данных: сколько значений хранить для каждого интервала.
    • CF — функция консолидации:
      • AVERAGE — среднее значение,
      • MAX — максимум,
      • MIN — минимум,
      • LAST — последнее значение.
    • xff — доля интервала консолидации, которую могут занимать неопределённые значения (0-1).
    • steps — сколько точек объединять для консолидации.
    • rows — число строк, хранимых в базе (должно быть больше 0).

Пример команды создания базы данных:

rrdtool create temperature.rrd
--step 300
DS:temp:GAUGE:600:-273:5000
RRA:AVERAGE:0.5:1:1200
RRA:MIN:0.5:12:2400
RRA:MAX:0.5:12:2400
RRA:AVERAGE:0.5:12:2400
  • Создаётся файл temperature.rrd
  • Шаг — 300 секунд
  • Единственная переменная — temp (минимальное: −273, максимальное: 5000)
  • Хранимые значения:
    • 1-й архив: каждое значение, всего 1200 значений, максимум 100 часов (1200 × 300).
    • 2-й архив: минимум из 12 значений, всего 2400 интервалов, максимум 100 дней (2400 × 12 × 300).
    • Аналогично для других архивов, только разные функции консолидации.

Запись данных в базу

Команда update добавляет новые данные. Данные автоматически перераспределяются согласно параметрам базы.

Синтаксис:

rrdtool update filename
[--template|-t ds-name[:ds-name]...]
[--daemon address] [--]
N|timestamp:value[:value...]
  • filename — имя файла.
  • [--template|-t ds-name[:ds-name]...] — какие переменные и в каком порядке обновлять.
  • [--daemon address] — попытаться подключиться к демону кэша (sm. кэш) и передать данные ему[2].
  • N|timestamp:value[:value...] — время (в формате timestamp или N — текущий момент) и соответствующие значения в порядке, определённом при создании базы или в шаблоне.

Построение графика

Используется для представления данных в удобной для человека визуальной форме. Требуется указать как минимум одну переменную из RRD-файла, возможно использование нескольких файлов и переменных.

Синтаксис:

rrdtool graph filename
[option …]
[data definition …]
[data calculation …]
[variable definition …]
[graph element …]
[print element …]
  • filename — имя создаваемого графического файла (PNG, SVG, EPS). Можно вывести изображение сразу в поток вывода.
  • Параметры option задают различные настройки графика[3]. К базовым относятся:
    • интервал времени: [-s|--start time] [-e|--end time] [-S|--step seconds]
    • подписи: [-t|--title string] [-v|--vertical-label string]
    • размеры: [-w|--width pixels] [-h|--height pixels] [-j|--only-graph] [-D|--full-size-mode]
    • цвет, шрифт, легенда и др.
  • data definition — определение переменных из RRD-файлов.
    • Пример: DEF:vname=rrdfile:ds-name:CF[:step=<step>][:start=
      • vname — имя переменной до 255 символов (латиница, цифры, подчёркивание).
      • rrdfile — имя RRD-файла.
      • ds-name — имя переменной в базе.
      • CF — функция консолидации.
      • step, start, end, reduce — параметры диапазона и шага для построения графика.
  • data calculation — вычисление новых переменных на основе операторов.
    Синтаксис: CDEF:vname=RPN_expression
    • Операции: логические, сравнения, арифметические и др[4].
  • variable definition — дополнительные переменные:
    Синтаксис: VDEF:vname=RPN_expression
    • Примеры функций: MAXIMUM — максимум; MINIMUM — минимум; AVERAGE — среднее; STDEV — стандартное отклонение; LAST/FIRST — последнее/первое значение[5].
  • graph element — элементы графика:[6]
    • Например:
      • GPRINT:vname:format — как PRINT, но выводит данные на сам график.
      • LINE[width]:value[#color][:legend][:STACK][:dashes[=...]][...]] — линия определённой толщины и цвета; возможно использование модификатора STACK и легенды.
      • AREA:value[#color][:legend][:STACK] — закрашенная область между осью X и значением.
  • print element — вывод значений под графиком:[7]
    • Пример: PRINT:vname:format[:strftime], где strftime позволяет форматировать время, полученное с помощью VDEF.

Дополнительные функции

  • dump — сохранение данных в формате XML[8].
  • fetch — экспорт данных за указанный период или с заданной функцией консолидации[9].
  • resize — изменение числа строк базы[10].
  • restore — восстановление базы данных из XML-файла[11].

Выпуски

История версий
Версия Дата Ветка/статус Примечания
1.0 16 июля 1999 устаревшая [12]
1.1 25 апреля 2005 поддерживаемая [13]
1.3 11 июня 2008 поддерживаемая [14]
1.4 27 октября 2009 поддерживаемая [15]
1.5 8 января 2015 поддерживаемая [16]
1.6.0 апрель 2016 не рекомендуется [17]
1.7.x май 2017 — май 2019 поддерживаемая [18]
1.8.0 (март 2022) поддерживаемая [19]
1.9.0 (июль 2024) поддерживаемая [20]

Примечания