Поиск по сайту
Интересуешься IT и системным администрированием? Подпишись на наш канал, где мы делимся инсайдами, новостями и практическими советами! Прокачай свои навыки вместе с нами!
Как использовать TimescaleDB в Zabbix
Zabbix — это мощное open-source-решение для мониторинга ИТ-инфраструктуры, которое позволяет отслеживать и анализировать работу сетей, серверов, приложений и других компонентов. По мере роста инфраструктуры и увеличения объёма собираемых метрик эффективное управление временными рядами данных становится одним из ключевых факторов производительности и масштабируемости системы мониторинга.
Именно поэтому, начиная с версии Zabbix 5.0, была реализована поддержка TimescaleDB — расширения для PostgreSQL, специально оптимизированного для работы с данными временных рядов. Использование TimescaleDB позволяет значительно повысить производительность обработки метрик, упростить управление большими объёмами исторических данных и снизить нагрузку на базу данных при длительном хранении информации.
В данной статье рассматриваются преимущества применения TimescaleDB в Zabbix, ключевые таблицы, которые используют возможности этого расширения, а также процесс установки и базовой интеграции TimescaleDB с Zabbix.
Примечание: Текущая версия TimescaleDB пока не поддерживает последнюю версию PostgreSQL (18), что необходимо учитывать при планировании обновлений и выборе версии СУБД.
Онлайн-курс: Zabbix 6. Мониторинг IT инфраструктуры предприятия.
Курс предлагает глубокое изучение Zabbix 6 и охватывает все ключевые аспекты: от установки и конфигурации до продвинутого мониторинга и автоматизации. Курс подходит как для начинающих, так и для опытных администраторов.
Содержание:
Преимущества использования TimescaleDB в Zabbix
TimescaleDB предоставляет Zabbix ряд существенных преимуществ, повышая производительность и эффективность работы с большими объёмами данных временных рядов, что особенно критично для систем мониторинга.
Масштабируемость и производительность
TimescaleDB изначально спроектирована для эффективного управления большими объёмами time-series данных. Благодаря архитектуре hypertable, данные автоматически разбиваются на логические чанки по времени (и при необходимости по дополнительным измерениям), что обеспечивает высокую скорость записи и чтения данных.
Для Zabbix, который постоянно генерирует огромное количество метрик от агентов, SNMP, API и других источников, это является ключевым преимуществом, напрямую влияющим на стабильность и отклик системы.
Сжатие данных
imescaleDB поддерживает сжатие исторических данных, что позволяет существенно сократить требования к дисковому пространству — в ряде случаев экономия может достигать до 90%.
При этом важно учитывать особенность механизма сжатия:
после сжатия данные становятся доступными только для чтения. Если требуется внести изменения, данные необходимо:
- распаковать (decompress),
- внести изменения,
- повторно выполнить сжатие.
Для Zabbix это, как правило, не является проблемой, так как исторические метрики редко требуют изменения после записи.
Простота администрирования
TimescaleDB полностью совместима с PostgreSQL, поэтому администраторам, уже знакомым с PostgreSQL, не требуется изучать принципиально новую СУБД.
Интеграция TimescaleDB выполняется достаточно просто и не вносит значительных накладных расходов в сопровождение базы данных.
Дополнительным преимуществом является то, что часть параметров TimescaleDB может настраиваться непосредственно через веб-интерфейс Zabbix, в разделе: Administration → Housekeeping
Это упрощает управление хранением и очисткой исторических данных, позволяя централизованно контролировать жизненный цикл метрик без необходимости постоянного вмешательства на уровне СУБД.
Таблицы Zabbix, использующие TimescaleDB
Zabbix использует TimescaleDB для хранения больших объёмов данных временных рядов, которые распределяются между несколькими ключевыми таблицами. Для эффективного управления такими данными применяется специальная структура hypertable, разработанная в TimescaleDB именно для работы с time-series.
Для упрощения процесса преобразования стандартных таблиц PostgreSQL в hypertables и оптимизации управления данными в Zabbix используется специальный SQL-скрипт:
/usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql
Данный файл содержит все необходимые команды для автоматического преобразования ключевых таблиц Zabbix в hypertables. Это позволяет Zabbix эффективно обрабатывать и хранить большие объёмы метрик без ручного вмешательства со стороны администратора.
Примечание: Начиная с версии Zabbix 7.2, скрипт schema.sql для TimescaleDB располагается по следующему пути: /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql
Принцип работы hypertable
Каждая команда в данном скрипте использует функцию create_hypertable, которая играет ключевую роль в преобразовании обычных таблиц PostgreSQL в hypertables.
Hypertable автоматически управляет данными, разбивая их на более мелкие подтаблицы, называемые chunks. Такое разбиение позволяет:
- ускорить выполнение запросов;
- повысить эффективность хранения данных;
- обеспечить быстрый доступ к большим объёмам временных рядов.
Это особенно важно для Zabbix, где количество метрик и исторических значений может исчисляться миллионами и миллиардами записей.
Основные параметры create_hypertable
Процесс преобразования таблиц в hypertables включает несколько ключевых параметров:
Имя таблицы (например, history_text)
Указывает, какая таблица будет преобразована в hypertable.
Таблица history_text, к примеру, используется для хранения текстовых данных — сообщений, логов и других строковых значений, собираемых Zabbix.
Столбец времени (например, clock)
Определяет столбец, содержащий временные метки.
Поле clock фиксирует момент времени, когда данные были собраны, и используется для корректного разбиения данных на чанки и их сортировки.
chunk_time_interval (например, 86400)
Задаёт временной интервал одного чанка в секундах.
Чанк (chunk) — это физическая часть hypertable в TimescaleDB, содержащая данные за определённый временной интервал. Параметр chunk_time_interval определяет, за какой период времени данные будут храниться в одном чанке.
Значение 86400 соответствует одному дню, то есть все данные, собранные в течение суток, будут храниться в одном чанке. Данный параметр может быть изменён в зависимости от нагрузки, объёма данных и требований к производительности.
migrate_data (например, true)
При значении true все уже существующие данные в таблице автоматически переносятся в новую структуру hypertable.
Это критически важный параметр при переводе рабочих таблиц Zabbix, так как он предотвращает потерю исторических данных.
if_not_exists (например, true)
Обеспечивает безопасное выполнение команды.
Если hypertable уже существует, повторное создание выполняться не будет, что исключает ошибки и риск повреждения данных. Если же hypertable отсутствует, он будет создан автоматически.
Использование данных механизмов TimescaleDB обеспечивает эффективное хранение, управление и быстрый доступ к большим объёмам данных временных рядов, что является критически важным для систем мониторинга уровня Zabbix.
Ниже приведён перечень основных таблиц Zabbix, которые переводятся в формат hypertable для повышения производительности и оптимизации хранения данных временных рядов.
history
Хранит числовые метрики с плавающей точкой (floating point), такие как загрузка CPU, использование памяти, значения датчиков и другие показатели.
PERFORM create_hypertable('history', 'clock',
chunk_time_interval => 86400,
migrate_data => true,
if_not_exists => true);
history_uint
Используется для хранения целочисленных значений метрик, например счётчиков, количественных показателей и статистики.
PERFORM create_hypertable('history_uint', 'clock',
chunk_time_interval => 86400,
migrate_data => true,
if_not_exists => true);
history_log
Содержит лог-сообщения, собираемые Zabbix, включая события и данные из лог-файлов.
PERFORM create_hypertable('history_log', 'clock',
chunk_time_interval => 86400,
migrate_data => true,
if_not_exists => true);
history_text
Хранит текстовые данные, такие как сообщения, результаты команд и текстовые значения элементов данных.
PERFORM create_hypertable('history_text', 'clock',
chunk_time_interval => 86400,
migrate_data => true,
if_not_exists => true);
history_str
Предназначена для хранения коротких текстовых строк.
PERFORM create_hypertable('history_str', 'clock',
chunk_time_interval => 86400,
migrate_data => true,
if_not_exists => true);
history_bin
Используется для хранения бинарных данных. Данная таблица доступна, начиная с Zabbix версии 7.0.2.
PERFORM create_hypertable('history_bin', 'clock',
chunk_time_interval => 86400,
migrate_data => true,
if_not_exists => true);
auditlog
Содержит данные аудита и журнал действий пользователей в системе Zabbix. Поддержка данной таблицы в формате hypertable реализована, начиная с Zabbix версии 7.0.
Обратите внимание, что в качестве временного идентификатора используется не стандартный clock, а поле auditid с функцией временного разбиения.
PERFORM create_hypertable('auditlog', 'auditid',
chunk_time_interval => 604800,
time_partitioning_func => 'cuid_timestamp',
migrate_data => true,
if_not_exists => true);
trends
Хранит агрегированные исторические данные метрик (усреднённые значения), используемые для долгосрочного анализа.
PERFORM create_hypertable('trends', 'clock',
chunk_time_interval => 2592000,
migrate_data => true,
if_not_exists => true);
trends_uint
Содержит агрегированные исторические данные для целочисленных метрик.
PERFORM create_hypertable('trends_uint', 'clock',
chunk_time_interval => 2592000,
migrate_data => true,
if_not_exists => true);
Использование различных значений chunk_time_interval для таблиц history и trends позволяет оптимально сбалансировать нагрузку между частыми операциями записи и долговременным хранением данных.
Таким образом, TimescaleDB обеспечивает Zabbix эффективную работу как с оперативными метриками, так и с агрегированной историей за длительные периоды.
Установка TimescaleDB для Zabbix
Подготовка к установке
Перед началом установки TimescaleDB необходимо, чтобы в системе уже был установлен PostgreSQL, а также пакет zabbix-sql-scripts из официального репозитория той версии Zabbix, с которой планируется работа.
Важно отметить, что сам Zabbix на этом этапе может быть ещё не установлен, однако пакет zabbix-sql-scripts является обязательным, так как именно он содержит необходимые SQL-скрипты для корректной настройки базы данных.
Для PostgreSQL настоятельно рекомендуется использовать официальный репозиторий PostgreSQL, а не системный репозиторий дистрибутива. Это обеспечивает лучшую совместимость, доступ к актуальным возможностям СУБД и своевременные обновления безопасности.
Все дальнейшие команды и настройки, описанные ниже, выполняются исключительно на сервере PostgreSQL.
Использование официального репозитория TimescaleDB
Установка TimescaleDB из официального репозитория позволяет использовать community-версию, которая поддерживает расширенные возможности, включая сжатие данных.
Даже в рамках community-лицензии механизм сжатия доступен и может существенно сократить объём хранимых исторических данных, а также повысить производительность запросов к архивной информации.
Добавление официального репозитория TimescaleDB
Для установки TimescaleDB необходимо добавить официальный репозиторий. На дистрибутивах семейства RHEL (например, Rocky Linux) выполните следующие действия:
tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL
Установка TimescaleDB
После добавления репозитория установите пакеты TimescaleDB.
Важно: число 16 в имени пакетов соответствует версии PostgreSQL. Замените его на ту версию PostgreSQL, которая используется в вашей системе.
dnf install timescaledb-2-postgresql-16 timescaledb-2-loader-postgresql-16
Настройка PostgreSQL с помощью timescaledb-tune
После установки необходимо выполнить утилиту timescaledb-tune.
Она используется для оптимизации стандартных параметров PostgreSQL и корректной настройки сервера для работы с TimescaleDB.
В рамках данной настройки:
- будет выбран актуальный конфигурационный файл PostgreSQL;
- будут автоматически добавлены параметры загрузки библиотек TimescaleDB;
- будут оптимизированы настройки производительности.
Для тестовых целей зададим увеличенное количество максимальных соединений (--max-conns=125).
Важно: утилита автоматически предполагает, что PostgreSQL работает на выделенном сервере. В продуктивной среде параметры могут потребовать дополнительной ручной корректировки.
При прохождении мастера настройки отвечайте yes (y) на все вопросы.
Также не забудьте указать путь к бинарным файлам PostgreSQL, соответствующий используемой версии.
timescaledb-tune --pg-config /usr/pgsql-16/bin --max-conns=125
Перезапуск PostgreSQL
После завершения настройки необходимо перезапустить службу PostgreSQL.
Важно: номер версии 16 в имени сервиса необходимо заменить на ту версию PostgreSQL, которая используется в вашей системе.
systemctl restart postgresql-16.service
Создание и активация TimescaleDB
После перезапуска PostgreSQL остаётся выполнить последний шаг — создать и активировать расширение TimescaleDB, а также применить SQL-скрипты, которые преобразуют таблицы Zabbix в hypertables.
В процессе развития проекта путь к SQL-скриптам был изменён:
- ранее использовался файл: /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql
- в текущих версиях применяется файл: /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql
Примечание: Начиная с версии Zabbix 7.2, файл schema.sql располагается по следующему пути: /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql
Важные замечания перед выполнением миграции
Предупреждения (warnings)
При выполнении скрипта schema.sql на TimescaleDB версии 2.9.0 и выше могут появляться предупреждения о несоответствии best practices.
Эти сообщения можно игнорировать, так как, несмотря на них, конфигурация будет выполнена корректно.
Длительное время миграции
Миграция существующих данных (history, trends, auditlog) может занять значительное время, особенно при большом объёме накопленной истории.
Критически важно: на время выполнения миграции сервер Zabbix и веб-интерфейс (frontend) должны быть полностью остановлены, чтобы обеспечить целостность данных и избежать повреждения базы.
Активация TimescaleDB для Zabbix
Для Zabbix версии 7.0 и ниже
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
Начиная с Zabbix версии 7.2
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
После выполнения данных шагов TimescaleDB будет полностью активирована и готова к использованию в связке с Zabbix.
Дополнительная информация
Настройка параметров очистки данных (Administration → Housekeeping)
Скрипт schema.sql автоматически настраивает ряд параметров очистки данных (housekeeping), которые становятся доступны в веб-интерфейсе Zabbix в разделе: Administration → Housekeeping
В частности, задаются следующие параметры:
- Override item history period - разрешает переопределение периода хранения истории элементов данных.
- Override item trend period - Разрешает переопределение периода хранения трендов.
Для использования партиционированного housekeeping для таблиц истории и трендов оба параметра должны быть включены.
При этом допускается включение переопределения только для истории или только для трендов — в зависимости от требований.
Важно учитывать, что при включении этих опций настройки хранения истории и трендов на уровне отдельных элементов данных (item-level) будут игнорироваться.
Дополнительные параметры, задаваемые в schema.sql
Помимо параметров очистки, скрипт schema.sql также включает следующие настройки:
- Enable compression - Разрешает использование сжатия данных.
- Compress records older than 7 days - Включает сжатие записей, возраст которых превышает 7 дней.
Эти параметры позволяют существенно сократить объём хранимых исторических данных и снизить нагрузку на дисковую подсистему.
Важный момент при удалении сжатых данных
Для корректного удаления сжатых данных с помощью встроенного механизма housekeeping обязательно должны быть включены оба параметра:
- Override item history period
- Override item trend period
Если переопределение отключено, а в таблицах уже присутствуют сжатые чанки, менеджер обслуживания базы данных не сможет удалять данные, и в разделах Housekeeping и System Information начнут появляться предупреждения о некорректной конфигурации.
Сообщения о неподдерживаемой версии TimescaleDB
Если в журнале Zabbix Server появляется сообщение о том, что версия TimescaleDB слишком новая, это не является критической проблемой.
Причина заключается в том, что Zabbix не всегда успевает оперативно помечать самые новые версии TimescaleDB как поддерживаемые на уровне кода. При этом:
- фактическая совместимость сохраняется;
- корректная работа с Zabbix гарантирована и проверена.
Отключение предупреждений о версии БД
Чтобы убрать сообщения о неподдерживаемой версии TimescaleDB из логов Zabbix, откройте файл конфигурации сервера:
nano /etc/zabbix/zabbix_server.conf
Измените (или добавьте) следующий параметр:
AllowUnsupportedDBVersions=1
Сохраните файл и перезапустите службу Zabbix Server:
systemctl restart zabbix-server
На этом настройка TimescaleDB для Zabbix завершена. Расширение успешно установлено, активировано и выполнена базовая оптимизация производительности базы данных.
Дальнейшие шаги рекомендуется сосредоточить на:
- организации резервного копирования базы данных;
- мониторинге состояния PostgreSQL и TimescaleDB;
- анализе производительности и корректировке параметров под реальные нагрузки.
Заключение
Использование TimescaleDB в связке с Zabbix позволяет вывести систему мониторинга на новый уровень производительности и масштабируемости. За счёт архитектуры hypertable, эффективного разбиения данных на чанки и поддержки сжатия временных рядов Zabbix получает возможность безболезненно работать с большими объёмами метрик, логов и аудиторных данных даже при длительном хранении истории.
Грамотная интеграция TimescaleDB не требует кардинальных изменений в архитектуре Zabbix и опирается на знакомый администраторам PostgreSQL-стек. Автоматическое преобразование ключевых таблиц, централизованное управление хранением данных через Housekeeping и возможность тонкой настройки параметров делают эксплуатацию базы данных более предсказуемой и управляемой.
При этом важно учитывать особенности миграции, корректно настраивать параметры очистки и сжатия данных, а также заранее планировать резервное копирование и мониторинг самой СУБД. В результате TimescaleDB становится не просто дополнением к Zabbix, а полноценным инструментом оптимизации, позволяющим повысить стабильность мониторинга и снизить эксплуатационные издержки при росте инфраструктуры.
Вам понравилась эта статья? Тогда вам, скорее всего, будет интересна другая полезная статья Как настроить двухфакторную аутентификацию (2FA) в Zabbix 7.0.
Интересуешься IT и системным администрированием? Подпишись на SysAdminHub в телеграмм, чтобы узнавать обо всем первым — t.me/SysAdminHub
Статья была полезна? Поддержи автора, и благодаря твоей помощи новые материалы будут выходить еще чаще:
