RRDtool
RRDtool (сокращение от round-robin database tool) — открытый инструмент для обработки и хранения данных, зависящих от времени (например, температуры, загрузки процессора, сетевого трафика и других показателей). Хранит данные в базе данных типа round-robin с постоянным размером. Является развитием инструмента MRTG и включает средства для визуализации данных в виде графиков. В отличие от MRTG, RRDtool — это полноценная программная среда для архивирования и графического отображения данных, управление которой осуществляется скриптами через параметры командной строки. Благодаря этому достигается большая гибкость при построении графиков, однако отсутствие подробных ошибок может вызывать затруднения у неопытных пользователей. В RRDtool, в отличие от MRTG, отсутствует собственный SNMP-модуль для сбора сетевых данных.
Что важно знать
| RRDtool | |
|---|---|
| Тип | база данных |
| Разработчик | Тоби Оттикер |
| Написана на | C |
| Операционная система | Unix-подобная операционная система |
| Последняя версия | |
| Репозиторий | github.com/oetiker/rrdto… |
| Лицензия | GNU General Public License |
| Сайт | oss.oetiker.ch/rrdtool/ |
Процесс создания новой базы данных и графика
- Создание пустой базы данных с помощью
rrdtool create - С помощью скрипта или cron периодически добавлять данные в базу командой
rrdtool update - Формирование графика (обычно скриптом) командой
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).
- Пример:
- GAUGE, COUNTER, DERIVE, ABSOLUTE:
RRA(round-robin archive) — определяет правило хранения данных: сколько значений хранить для каждого интервала.- CF — функция консолидации:
AVERAGE— среднее значение,MAX— максимум,MIN— минимум,LAST— последнее значение.
- xff — доля интервала консолидации, которую могут занимать неопределённые значения (0-1).
- steps — сколько точек объединять для консолидации.
- rows — число строк, хранимых в базе (должно быть больше 0).
- CF — функция консолидации:
Пример команды создания базы данных:
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.
- Пример:
Выпуски
| Версия | Дата | Ветка/статус | Примечания |
|---|---|---|---|
| 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] |


