7 августа 2026 года проект RRDtool выпустил версию 1.11.0. Релиз добавляет независимый поворот подписей вертикальных осей и ограничение диапазона подписей правой оси, а заодно закрывает несколько неприятных сбоев — от падения rrdtool dump на специально сформированных RRD-файлах до переполнения буфера при обработке аргументов графика. Для систем мониторинга обновление затрагивает сразу три слоя работы с временными рядами: экспорт, вычисления и визуализацию.

RRDtool 1.11.0 вышел 7 августа после короткой ветки 1.10.x
RRDtool хранит временные ряды — значения, которые меняются во времени, например загрузку процессора, сетевой трафик, температуру или количество запросов. Проект объединяет хранение таких данных с их анализом и построением графиков.
Версия 1.11.0 опубликована 7 августа 2026 года. Предыдущий релиз 1.10.3 вышел 25 мая и содержал одно исправление упаковки — отсутствовавшую зависимость Cairo для Ubuntu-пакета. В 1.11.0 список заметно шире: две функции rrdgraph, исправления dump и restore, корректировка derive через libdbi, новая схема числового номера версии Perl-модулей и несколько защит от аварийного завершения процесса.
Здесь есть любопытный сдвиг акцента. RRDtool давно решает базовую задачу хранения данных, а свежий релиз разбирается с пограничными ситуациями вокруг этих данных: кодировками, ошибочными параметрами, повреждёнными RRD-файлами и отображением шкал на сложных графиках.
rrdgraph получил независимый поворот подписей обеих осей Y
В RRDtool 1.11.0 появились параметры --vertical-label-angle и --right-axis-label-angle. Они позволяют во время запуска rrdgraph отдельно задавать угол для подписи левой вертикальной оси и подписи правой оси.
Раньше ориентация таких подписей опиралась на значение RRDGRAPH_YLEGEND_ANGLE, заданное при сборке. Теперь угол можно менять для конкретного графика. Разработчики сохранили прежнее значение как настройку по умолчанию, поэтому существующие команды генерации графиков продолжают использовать прежнюю ориентацию. В release notes отдельно приведён пример --right-axis-label-angle 270: подпись справа в таком режиме читается сверху вниз.
Вторая новая опция — --right-axis-range min:max. Она ограничивает диапазон подписей на правой оси. Проблема проявлялась, когда диапазон левой шкалы и пересчитанная правая шкала расходились: RRDtool мог рисовать справа значения, которых ограниченная правая ось фактически не достигает. В 1.11.0 нижнюю и верхнюю границы можно задать отдельно, а одну из них оставить пустой, если ограничение требуется только с одной стороны.
Для панелей мониторинга это влияет прежде всего на читаемость. При двух шкалах один и тот же график может показывать исходную величину слева и пересчитанное представление справа; теперь подписи правой оси можно удержать внутри её реального диапазона.
dump и restore больше не зависят от локального названия часового пояса
Одно из самых практичных исправлений связано с XML, который создаёт rrdtool dump. До версии 1.11.0 RRDtool записывал в комментарий локальное название часового пояса через формат %Z. В некоторых локалях, включая CJK-окружения, такое название может использовать кодировку, несовместимую с UTF-8.
Получался неприятный сценарий: dump создавал XML, а последующий rrdtool restore останавливался с ошибкой Input is not proper UTF-8. Сам файл с данными мог быть исправен; проблема возникала из-за текстового комментария с названием часового пояса.
В 1.11.0 разработчики заменили %Z на числовое смещение UTC через %z, например +0900. Такая запись состоит из ASCII-символов и не конфликтует с объявлением кодировки XML. Уже созданные dump-файлы сохраняют прежнее содержимое; в release notes указано, что они остаются корректным XML, если фактическая кодировка совпадает с содержимым.
RRDtool устранил несколько причин segfault, SIGABRT и SIGFPE
Сразу несколько исправлений касаются ситуаций, в которых процесс RRDtool мог завершиться аварийно. Самый наглядный случай связан с --x-grid: если параметр передавался без завершающего поля формата даты, переменная stroff могла остаться неинициализированной. Дальнейшая проверка читала случайное значение и при определённом ходе выполнения передавала ошибочное смещение в strdup(). Версия 1.11.0 инициализирует stroff нулём, после чего неполный формат попадает в уже существующую ветку ошибки invalid x-grid format.
Ещё одно исправление закрывает переполнение буфера на один байт в checkUnusedValues(). Ошибка проявлялась при формировании сообщения о неиспользованных аргументах графика и под glibc с усиленными проверками strcat() могла завершать процесс сигналом SIGABRT. Код переработали так, чтобы размер буфера рассчитывался корректно, а разделитель добавлялся без прежней схемы «собрать строку и затем обрезать последний символ».
rrdtool dump получил защиту и от деления на ноль. Специально сформированный RRD-файл с pdp_cnt или pdp_step, равным нулю, мог привести к SIGFPE при вычислении временной метки. Теперь такие данные отклоняются с описанием ошибки.
В changelog присутствует отдельный пункт hardening для буфера rrd_diff: временный буфер теперь рассчитывается под максимально возможный вход. При этом официальный релиз не связывает перечисленные исправления с идентификаторами CVE и не публикует отдельную оценку их эксплуатируемости.
libdbi derive теперь возвращает 0 при неизменившемся счётчике
Исправление в связке libdbi и derive меняет результат для счётчика, который за интервал вообще не изменился. До 1.11.0 проверка принимала только d_value > 0, поэтому нулевой прирост попадал в ту же ветку, что и отрицательное значение после сброса счётчика, и в результате появлялся NaN.
В 1.11.0 условие изменено на d_value >= 0. Если исходный счётчик остаётся постоянным, derive возвращает 0. Отрицательное изменение по-прежнему обрабатывается отдельно как ситуация, характерная для сброса счётчика.
Разница между 0 и NaN заметна в автоматической обработке. Ноль описывает измеренный интервал без прироста, тогда как NaN обозначает отсутствующее или неопределённое значение. Для последующих вычислений, агрегации и графиков это две разные семантики.
Perl-модули получили новую схему числового номера версии
RRDtool 1.11.0 исправляет старую проблему с $RRDs::VERSION и $RRDp::VERSION. Прежняя числовая кодировка плохо пережила появление двузначных minor-версий. Например, 1.10.3 превращалась в 1.10003, а 1.9.0 — в 1.9000; при обычном числовом сравнении более новая ветка 1.10 могла выглядеть меньше 1.9.
Теперь minor- и patch-поля дополняются до трёх цифр. Для 1.10.3 получается 1.010003. Та же схема применяется к NUMVERS в configure.ac и win32/rrd_config.h.
Изменение затрагивает проверки версии в коде. Конструкции вроде $RRDs::VERSION >= 1.2, рассчитанные на старый формат, больше не отражают прежнюю шкалу чисел. В release notes разработчики прямо указывают новую границу >= 1.002 либо сравнение строки X.Y.Z через Perl version. Эта деталь относится прежде всего к скриптам и пакетным проверкам, которые читают числовую версию binding-модуля напрямую.
Подписи больших значений сохраняют дробную точность после SI-масштабирования
Ещё одна поправка затрагивает графики с крупными значениями, где RRDtool применяет SI-масштабирование. При дробном шаге сетки после такого преобразования подписи оси Y могли терять точность и повторяться. В changelog в качестве примера упомянуты значения около 10G+.
Версия 1.11.0 сохраняет достаточное количество знаков после запятой для такого шага. Высокий график с плотной сеткой в результате получает различимые подписи там, где раньше несколько соседних линий могли отображать одинаковое округлённое число.
Сборка документации тоже получила небольшую совместимостную правку. configure теперь проверяет поддержку nroff -Wbreak во время конфигурации, что устраняет проблему на системах с BSD-производным nroff, включая /usr/bin/nroff в macOS.
RRDtool 1.11.0 меняет поведение точечно, сохраняя прежние графики по умолчанию
В официальном changelog 1.11.0 не заявлены изменения формата RRD-хранилища или миграция существующих баз. Новые углы подписей осей используют прежнее compile-time значение по умолчанию, а изменения dump, derive и проверок входных данных срабатывают в конкретных сценариях, описанных в release notes.
Наиболее заметная линия релиза проходит через обработку пограничных случаев: XML с локальными кодировками, нулевые приращения счётчиков, ошибочный --x-grid, повреждённые параметры RRA и некорректный размер временного буфера. Параллельно rrdgraph получил два механизма управления правой осью, которых раньше не было на уровне параметров запуска.
Вопрос о распространении версии 1.11.0 через системные репозитории разных дистрибутивов остается открытым. На момент публикации официальный релиз на GitHub уже включает исходные архивы и готовые RPM-артефакты. Сроки появления этой версии в независимых репозиториях зависят от их собственных циклов обновления.