7 Настройка TimescaleDB

Обзор

Zabbix поддерживает TimescaleDB — решение для баз данных на основе PostgreSQL, автоматически разделяющее данные на временные фрагменты для обеспечения более высокой производительности при масштабировании.

В настоящее время TimescaleDB не поддерживается прокси Zabbix.

Инструкции на этой странице можно использовать в следующих сценариях:

  • Создание базы данных TimescaleDB или миграция существующих таблиц PostgreSQL в TimescaleDB (см. Настройка).
  • Обновление схемы существующей базы данных TimescaleDB при обновлении Zabbix (см. Обновление схемы TimescaleDB).

Конфигурация

Предварительные требования: расширение TimescaleDB поддерживаемой версии, установленное на сервере базы данных. Инструкции по установке см. в документации TimescaleDB.

Перед установкой TimescaleDB установите поддерживаемую версию PostgreSQL из официального репозитория PostgreSQL.

Включите расширение TimescaleDB для конкретной базы данных, выполнив:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

Для выполнения этой команды требуются права администратора базы данных.

Если вы используете схему базы данных, отличную от 'public', необходимо добавить предложение SCHEMA в приведенную выше команду. Например:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA yourschema CASCADE;" | sudo -u postgres psql zabbix

Затем запустите скрипт postgresql/timescaledb/schema.sql. Для новых установок скрипт необходимо запускать после создания обычной базы данных PostgreSQL с исходной схемой/данными (см. создание базы данных).

cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix

Пожалуйста, игнорируйте предупреждающие сообщения о несоблюдении рекомендаций по лучшим практикам при выполнении скрипта schema.sql в TimescaleDB версии 2.9.0 и выше. Несмотря на это предупреждение, настройка будет успешно завершена.

Миграция существующих данных истории, трендов и журнала аудита может занять много времени. На время миграции сервер Zabbix и веб-интерфейс должны быть остановлены.

Скрипт schema.sql устанавливает следующие параметры housekeeper:

  • Переопределить период хранения истории элемента данных
  • Переопределить период хранения трендов элемента данных

Чтобы использовать секционированную очистку истории и трендов, обе эти опции должны быть включены. Также можно включить переопределение отдельно — только для истории или только для трендов.

Для PostgreSQL и TimescaleDB скрипт postgresql/timescaledb/schema.sql устанавливает два дополнительных параметра:

  • Включить сжатие
  • Сжимать записи старше 7 дней

Чтобы housekeeper успешно удалял сжатые данные, должны быть включены оба параметра: Переопределить период хранения истории элементов данных и Переопределить период хранения трендов элементов данных. Если переопределение отключено, а таблицы содержат сжатые чанки, housekeeper не будет удалять данные из этих таблиц, и в разделах Очистка истории и Информация о системе будут отображаться предупреждения о некорректной конфигурации.

Все эти параметры можно изменить в разделе Администрирование > Очистка истории после установки.

Для оптимизации параметров конфигурации PostgreSQL в вашем postgresql.conf вы можете использовать инструмент timescaledb-tune, предоставляемый TimescaleDB.

Обновление схемы TimescaleDB

При обновлении Zabbix до версии, содержащей новые гипертаблицы TimescaleDB, сервер Zabbix не настраивает эти гипертаблицы автоматически (например, при обновлении с Zabbix 6.4 до 8.0, так как в версиях 7.0.0 и 7.0.2 были добавлены новые гипертаблицы).

Чтобы настроить новые гипертаблицы TimescaleDB, выполните следующие шагы:

  1. Запустите сервер Zabbix; это обновит существующую базу данных.
  2. Убедитесь по файлу журнала сервера, что обновление базы данных завершено; после завершения остановите сервер Zabbix. Обратите внимание, что сервер записывает предупреждение, если пытается включить сжатие для таблицы, которая не является гипертаблицей.
  3. Запустите скрипт postgresql/timescaledb/schema.sql; он настроит новые гипертаблицы TimescaleDB. Обратите внимание, что начиная с Zabbix 7.0.0 расположение и имя скрипта были изменены с postgresql/timescaledb.sql на postgresql/timescaledb/schema.sql.

Пожалуйста, игнорируйте предупреждающие сообщения о несоблюдении рекомендаций по лучшим практикам при запуске скрипта schema.sql на TimescaleDB версии 2.9.0 и выше. Несмотря на это предупреждение, настройка будет успешно завершена.

Сжатие TimescaleDB

Нативное сжатие TimescaleDB поддерживается для всех таблиц Zabbix, которые являются hypertable в TimescaleDB. Во время обновления или миграции на TimescaleDB начальное сжатие больших таблиц может занять много времени.

Обратите внимание, что сжатие поддерживается по лицензии Timescale Community "timescale" и не поддерживается по лицензии Apache 2.0 "apache". Если Zabbix обнаруживает, что сжатие не поддерживается, в журнал сервера Zabbix записывается предупреждение, а пользователи не могут включить сжатие в веб-интерфейсе.

Перед использованием сжатия пользователям рекомендуется ознакомиться с ним в документации TimescaleDB.

Обратите внимание, что сжатие накладывает определенные ограничения, в частности:

  • Изменения сжатых chunk'ов (вставка, удаление, обновление) не допускаются
  • Изменения схемы для сжатых таблиц не допускаются.

Параметры сжатия можно изменить в блоке Сжатие истории, трендов и журнала аудита в разделе Администрирование > Обслуживание веб-интерфейса Zabbix.

Параметр По умолчанию Комментарии
Включить сжатие Включено Установка или снятие флажка не активирует и не деактивирует сжатие немедленно. Поскольку сжатием управляет Housekeeper, изменения вступят в силу максимум через 2 раза HousekeepingFrequency часов (задается в zabbix_server.conf)

После отключения сжатия новые chunk'и, попадающие в период сжатия, сжиматься не будут. Однако все ранее сжатые данные останутся сжатыми. Чтобы распаковать ранее сжатые chunk'и, следуйте инструкциям в документации TimescaleDB.

При обновлении с более старых версий Zabbix с поддержкой TimescaleDB сжатие по умолчанию включено не будет.
Сжимать записи старше чем 7d Этот параметр не может быть меньше 7 дней.

Из-за неизменяемости сжатых chunk'ов все поздние данные (например, данные, задержанные прокси) старше этого значения будут отброшены.

:::note Для лучшей производительности обновления трендов вы можете уменьшить chunk_time_interval для таблиц trends и trends_uint с 30 дней до 7 дней или меньше в зависимости от того, сколько элементов данных используют тренды. Назначение этой настройки — следовать рекомендациям TimescaleDB и обеспечить, чтобы размер chunk'а оставался в пределах доступных системных ресурсов. :::