7 Настройка TimescaleDB
Обзор
Для обеспечения большего уровня производительности при масштабировании, Zabbix поддерживает TimescaleDB — решение на основе базы данных PostgreSQL для автоматического партиционирования данных на фрагменты (chunks) на основе времени.
В настоящее время 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 и выше не соблюдаются рекомендации по лучшим практикам.
Несмотря на это предупреждение, настройка будет успешно завершена.
Миграция существующих данных history, trends и audit log может занять много времени. На период миграции сервер Zabbix и веб-интерфейс должны быть остановлены.
Скрипт schema.sql задает следующие параметры housekeeping:
- Переопределить период history элемента данных
- Переопределить период trends элемента данных
Чтобы использовать разбиение housekeeping на разделы для history и trends, необходимо включить оба этих параметра. Также можно включить переопределение отдельно только для history или только для trends.
Для PostgreSQL и TimescaleDB скрипт postgresql/timescaledb/schema.sql задает два дополнительных параметра:
- Включить сжатие
- Сжимать записи старше 7 дней
Для успешного удаления сжатых данных процессом очистки истории, обе опции Переопределить период хранения истории элементов данных (Override item history period) и Переопределить период хранения динамики изменения элементов данных (Override item trend period) должны быть активированы. Если переопределение отключено, а таблицы имеют сжатые фрагменты, процесс очистки истории не удалит данные из этих таблиц, а в разделах Очистка истории (Housekeeping) и Информация о системе (System information) будет отображено предупреждение о некорректной конфигурации.
Все эти параметры можно изменить в разделе Администрирование → Очистка истории (Administration → Housekeeping) после установки.
Возможно, вы захотите запустить инструмент timescaledb-tune, предоставляемый TimescaleDB, чтобы оптимизировать параметры конфигурации PostgreSQL в вашем файле postgresql.conf.
Обновление схемы TimescaleDB
При обновлении Zabbix до версии, содержащей новые гипертаблицы TimescaleDB, сервер Zabbix не настраивает эти гипертаблицы автоматически (например, при обновлении с Zabbix 6.4 до 8.0, так как в версиях 7.0.0 и 7.0.2 были добавлены новые гипертаблицы).
Чтобы настроить новые гипертаблицы TimescaleDB, выполните следующие шагы:
- Запустите сервер Zabbix; это обновит существующую базу данных.
- Убедитесь по файлу журнала сервера, что обновление базы данных завершено; после завершения остановите сервер Zabbix. Обратите внимание, что сервер записывает предупреждение, если пытается включить сжатие для таблицы, которая не является гипертаблицей.
- Запустите скрипт
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.
| Parameter | Default | Comments |
|---|---|---|
| Enable compression | Enabled | Установка или снятие флажка не активирует и не деактивирует сжатие немедленно. Поскольку сжатие выполняется Housekeeper, изменения вступят в силу максимум через 2 раза HousekeepingFrequency часов (задается в zabbix_server.conf)После отключения сжатия новые chunk'и, попадающие в период сжатия, сжиматься не будут. Однако все ранее сжатые данные останутся сжатыми. Чтобы распаковать ранее сжатые chunk'и, следуйте инструкциям в документации TimescaleDB. При обновлении с более старых версий Zabbix с поддержкой TimescaleDB сжатие по умолчанию включено не будет. |
| Compress records older than | 7d | Этот параметр не может быть меньше 7 дней. Из-за неизменяемости сжатых chunk'ов все поздние данные (например, данные, задержанные прокси) старше этого значения будут отброшены. |
:::note
Для лучшей производительности обновления трендов может потребоваться уменьшить chunk_time_interval для таблиц trends и trends_uint с 30 дней до 7 дней или меньше, в зависимости от того, сколько элементов данных используют тренды.
Назначение этой настройки — соответствовать рекомендациям TimescaleDB и обеспечить, чтобы размер chunk'а оставался в пределах доступных системных ресурсов.
:::