Всем привет! Мы делаем проекты по Zabbix, накопили большую экспертизу и решили сделать переводы нескольких статей, которые нам показались интересными и полезными. Наверняка, будут полезны и вам. Также своим опытом делимся в телеграм-канале zabbix_ru, где вы можете найти полезные материалы и записи наших вебинаров, опубликованных на нашем ютуб-канале (прим. переводчика). Ниже ссылки на предыдущие статьи из цикла.
Миграция с MySQL на PostgreSQL
SELinux: интеграция с Zabbix и другими инструментами
Защита от ложных срабатываний триггеров в Zabbix с использованием функций min/max/avg
Zabbix – автоматизация управления пользователями (JIT)
Zabbix — это надежное решение с открытым исходным кодом для мониторинга ИТ-инфраструктуры, позволяющее отслеживать и анализировать производительность сети, серверов, приложений и других компонентов. По мере роста объема данных эффективное управление временными рядами становится ключевым фактором. Поэтому, начиная с версии 5.0, Zabbix начал поддерживать TimescaleDB — расширение PostgreSQL, оптимизированное для временных рядов. В этой статье рассматриваются преимущества использования TimescaleDB в Zabbix, ключевые таблицы и процесс установки.
Преимущества TimescaleDB в Zabbix
TimescaleDB обеспечивает Zabbix ряд существенных преимуществ, повышая производительность и эффективность при работе с большими объемами временных рядов данных:
Масштабируемость и производительнос��ь: TimescaleDB разработан для эффективного управления большими объёмами данных временных рядов. Благодаря архитектуре гипертаблиц он обеспечивает быструю запись и чтение данных, что критически важно для систем мониторинга, таких как Zabbix, которые генерируют огромные объёмы метрик.
Сжатие данных: TimescaleDB позволяет сжимать исторические данные, снижая требования к объёму хранилища и потенциально обеспечивая экономию места на диске до 90%. Однако сжатие предотвращает изменение уже сжатых данных; для любого изменения данные необходимо сначала распаковать, изменить, а затем повторно сжать.
Простота управления: TimescaleDB полностью совместима с PostgreSQL, поэтому администраторы, знакомые с PostgreSQL, также смогут легко работать с TimescaleDB. Реализация проста и минимизирует накладные расходы на управление базой данных. Более того, некоторые настройки TimescaleDB можно настроить непосредственно в панели администрирования Zabbix, в разделе «Administration > Housekeeping».
Таблицы в Zabbix, использующие TimescaleDB
Zabbix использует TimescaleDB для хранения большого объёма данных временных рядов, разделённых на несколько ключевых таблиц. Для эффективности и управляемости этого процесса используется специальная структура, называемая гипертаблицей, предназначенная для работы с данными временных рядов в TimescaleDB. Для упрощения преобразования существующих таблиц в гипертаблицы и оптимизации управления этими данными файл /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql содержит необходимые команды. Этот скрипт автоматизирует преобразование ключевых таблиц Zabbix в гипертаблицы, обеспечивая эффективную обработку больших объёмов данных.
Примечание: Начиная с версии Zabbix 7.2, скрипт schema.sql для TimescaleDB находится по следующему пути: /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql.
Каждая команда в скрипте использует функцию create_hypertable, которая критически важна для преобразования обычных таблиц PostgreSQL в гипертаблицы. Гипертаблицы работают, автоматически распределяя данные по более мелким подтаблицам, называемым фрагментами. Такое разделение обеспечивает эффективные запросы и хранение данных, что крайне важно для быстрого доступа к большим объёмам временных рядов. Процесс преобразования таблиц в гипертаблицы включает в себя несколько важных параметров:
Имя таблицы (например,
'history_text'): Указывает, какая таблица будет преобразована в гипертаблицу. В случаеhistory_textтаблицы она содержит текстовые данные, такие как сообщения и журналы, отслеживаемые в Zabbix.Столбец времени (например,
'clock'): этот параметр определяет столбец с временными метками, необходимыми для разделения данных на отдельные фрагменты. В'clock'столбце указывается время записи данных, что позволяет правильно их разбить на разделы и сортировать.chunk_time_interval(например,86400): этот параметр определяет временной интервал в секундах для отдельных фрагментов. Значение в86400секундах соответствует одному дню. Это означает, что все данные, собранные за один день, будут сохранены в одном фрагменте. Этот интервал можно настроить в соответствии с требованиями к производительности и объёмом обрабатываемых данных.migrate_data(например,true): если этому параметру присвоено значениеtrue, все существующие данные в таблице автоматически переносятся в новую структуру фрагментов. Эта функция критически важна при преобразовании существующих таблиц в гипертаблицы для предотвращения потери данных.if_not_exists(например,true): этот параметр гарантирует, что если гипертаблица уже существует, команда не будет создавать её заново, предотвращая возможные ошибки и потерю данных. Если гипертаблица ещё не существует, она будет создана заново.
Использование этих настроек TimescaleDB обеспечивает эффективное управление и доступ к большим объёмам данных временных рядов, что крайне важно для таких систем, как Zabbix, которые генерируют и анализируют большие объёмы метрик. Ниже перечислены ключевые таблицы, преобразованные в гипертаблицы для повышения производительности и эффективности:
history: Хранит числовые данные с плавающей запятой.
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: Содержит информацию о регистрации.
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: Хранит двоичные данные. (Начиная с версии 7.0.2)
PERFORM create_hypertable('history_bin', 'clock', chunk_time_interval => 86400, migrate_data => true, if_not_exists => true);auditlog: Содержит информацию о регистрации действий пользователя. (Начиная с версии 7.0)
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);Установка TimescaleDB в Zabbix
Подготовка к установке
Перед установкой TimescaleDB необходимо установить PostgreSQL, а также пакет zabbix-sql-scripts из официального репозитория для используемой версии Zabbix. Для 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.
Замените номер версии (16) на версию PostgreSQL, которую вы используете.
dnf install timescaledb-2-postgresql-16 timescaledb-2-loader-postgresql-16Запустите timescaledb-tune утилиту и передайте большее значение для максимального количества подключений (--max-conns), установленное 125 для этих целей тестирования.
Эта утилита используется для настройки параметров PostgreSQL по умолчанию для повышения производительности и соответствующей настройки параметров PostgreSQL для работы с TimescaleDB.
Эта утилита также поможет нам выбрать текущий и действительный файл конфигурации PostgreSQL с помощью мастера установки и настроить автоматическую загрузку библиотек TimescaleDB.
Ответьте «да» (y) на все вопросы. Обратите внимание, что мастер настройки предполагает, что PostgreSQL работает на автономном сервере, поэтому м��жет потребоваться соответствующая корректировка параметров.
Замените номер версии (16) на версию PostgreSQL, которую вы используете.
timescaledb-tune --pg-config /usr/pgsql-16/bin --max-conns=125
Затем перезапустите службу PostgreSQL:
Замените номер версии (16) на версию PostgreSQL, которую вы используете.
systemctl restart postgresql-16.serviceОсталось только создать и активировать сам TimescaleDB:
Обратите внимание, что в процессе разработки путь был изменен с исходного /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql на новый /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql.
Примечание: начиная с версии Zabbix 7.2, скрипт schema.sql для TimescaleDB находится по следующему пути:/usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql.
Игнорирование предупреждений: При запуске скрипта schema.sql на TimescaleDB версии 2.9.0 и выше могут появляться предупреждения о несоответствии лучшим практикам. Эти предупреждения можно игнорировать, так как настройка будет успешно завершена, несмотря на них.
Длительное время миграции: Перенос существующих исторических данных, терендов и журналов аудита может занять много времени!!! В это время сервер 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
Дополнительная информация
Настройка параметров очистки (Administration > Housekeeping): Скрипт schema.sql устанавливает следующие параметры очистки:
Override item history period: разрешить переопределять период хранения истории элементов.
Override item trend period: разрешить переопределение периода сохранения трендов.
Для использования раздельного управления историей и трендами необходимо включить оба этих параметра. Также можно включить переопределение только для истории или только для трендов. Если этот параметр применяется, настройки истории и тенденций на уровне элементов будут игнорироваться.
Другие параметры в скрипте schema.sql : Этот скрипт также задает два дополнительных параметра:
Enable compression: разрешить сжатие.
Compress records older than 7 days: сжать записи старше 7 дней.
Для успешного удаления сжатых данных с помощью функции встроенного housekeeper необходимо включить параметры «Override item history period» и «Override item trend period». Если функция переопределения отключена и таблицы содержат сжатые фрагменты, менеджер обслуживания не удалит данные из этих таблиц, а в разделах «Управление» и «Информация о системе» появятся предупреждения о неправильной настройке.
Если в журнале сервера Zabbix вы видите сообщение о том, что версия TimescaleDB слишком новая, это не является серьёзной проблемой. Zabbix может не успеть достаточно быстро отреагировать на последние версии TimescaleDB, чтобы указать её поддержку в своём коде, но совместимость с Zabbix гарантирована и проверена нами.

Чтобы избежать сообщений о совместимости в файле журнала Zabbix, просто откройте файл конфигурации сервера Zabbix, расположенный по адресу, /etc/zabbix/zabbix_server.conf и измените следующий параметр конфигурации:
AllowUnsupportedDBVersions=1Сохраните файл с этой настройкой и перезапустите системную службу сервера Zabbix.
systemctl restart zabbix-serverНа этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал zabbix_ru, где будет еще больше полезной информации.