Модуль загрузки данных метрик в базу данных QDLM

Для загрузки данных метрик в базу данных используется модуль QDLM (Quantum Data Loader for Metrics), который, в свою очередь, основан на функциональности прямой загрузки данных (предварительная установка QDL для работы QDLM не требуется). Функциональность прямой загрузки данных работает в обход стандартного механизма и позволяет в разы сократить время, необходимое для загрузки данных. Однако следует помнить о том, что при такой загрузке данные не попадают в стандартные файлы WAL, и данные не появятся при восстановлении базы из резервной копии и последующего воспроизведения WAL. Но при использовании инкрементального резервного копирования эти данные будут скопированы автоматически.



Настройка загрузки данных метрик в таблицу базы данных

В настоящее время можно организовать как локальную обработку CSV-файлов метрик на том же экземпляре QHB, так и централизованную обработку CSV-файлов из нескольких источников. Во втором случае подразумевается либо запись файлов в каталог CSV-файлов от нескольких серверов метрик, расположенных на одном хосте с несколькими экземплярами QHB, либо копирование CSV-файлов с удаленных хостов любыми средствами операционной системы. Возможна также комбинация этих вариантов.



Установка QDLM

Установка QDLM осуществляется аналогично другим модулям QHB. Более подробную информацию см. в пошаговой инструкции по начальной загрузке, установке и запуску.

Настройка параметров в файле параметров QDLM

В файле /etc/qdlm/config.yml нужно прописать значения для следующих параметров:

# максимальный период переключения csv-файлов (в минутах), поступающих от различных
# серверов метрик задается для проверки сформированных ранее csv-файлов, которые
# могли быть пропущены при обработке, и пропуска тех, которые могут быть записаны
# еще не до конца
max_rotation_age: 60  

# каталог CSV-файлов
csv_directory: "/var/lib/qhb/csv_files"

# параметры соединения с базой данных
qhb_connection: "host=localhost port=5432 user=qhb dbname=qhb"

# файл параметров прямой загрузки данных
qdl_config: "/etc/qdlm/qdl.yml"

# каталог данных
qhb_data: "/var/lib/qhb/data"

Параметры соединения описаны в разделе Строки подключения. Особенностью QDLM является возможность подключения к базе данных только на локальном хосте. В текущем релизе это обусловлено копированием сформированных файлов таблиц напрямую в каталог базы данных в локальной файловой системе. В случае необходимости использования отдельной базы данных (например, metrics) и отдельного пользователя для базы данных метрик (например, metrics_user) можно выполнить от имени суперпользователя следующий набор команд из psql:

CREATE DATABASE metrics;
CREATE USER metrics_user WITH login;
GRANT all ON database metrics to metrics_user;
\c metrics;
GRANT usage ON schema pg_toast to metrics_user;
GRANT all privileges ON all tables IN schema pg_toast to metrics_user;

После этого в строке соединения можно прописать соответствующие имена пользователя и базы данных:

# параметры соединения с базой данных
qhb_connection: "host=localhost port=5432 user=metrics_user dbname=metrics"

Файл параметров прямой загрузки данных метрик

Предварительно настроенный файл параметров прямой загрузки данных метрик копируется при установке QDLM и не требует изменений. Путь к нему по умолчанию: /etc/qdlm/qdl.yml.



Запуск утилиты QDLM

Запуск прямой загрузки данных метрик производится следующей командой:

qdlm load -c /etc/qdlm/config.yml

Запуск прямой загрузки данных метрик с параметром -D /<PATH>/<QHB-DATA> переназначает каталог данных.

При запуске утилита проверяет каталог, указанный в параметре csv_directory и начинает обработку csv-файлов, которые были обновлены не позднее, чем max_rotation_age минут назад. Если в каталог записываются файлы нескольких серверов метрик, в качестве max_rotation_age администратором устанавливается максимальное значение в минутах из всех значений параметра rotation_age соответствующих серверов метрик. Благодаря такому ограничению все свежие файлы, в которые может происходить запись, не будут обрабатываться. После обработки накопившихся файлов утилита переходит в режим ожидания события окончания записи очередного файла в каталоге, после чего новый файл обрабатывается, и его данные заносятся в новую партицию таблицы metric_archive. В текущем релизе схема таблицы предзадана и не меняется. После этого происходит проверка, нет ли файлов, события по которым могли быть случайно пропущены (например, такое возможно при слишком большой загрузке системы). Если такие файлы обнаруживаются, они обрабатываются, после чего утилита снова переходит в режим ожидания получения события об окончании записи очередного csv-файла. Обработанные csv-файлы перемещаются в подкаталог qdlm_swap каталога, указанного в csv_directory. В дальнейшем обработанные csv-файлы можно удалить или переместить в некий архив.



Результаты обработки

После запуска обработки CSV-файлов первым шагом проверяется, созданы ли партиционированная таблица metric_archive и последовательность seq_metric_chunk в схеме public базы данных, указанной в параметрах. Если эти объекты еще не созданы, они создаются автоматически.

Таблица 1. Таблица metric_archive

Столбец Тип
Описание
instance_id text
Значение, указанное в параметре qhb_instance сервера метрик. В общем случае данные могут поступать из различных источников и относиться к разным базам данных.
metric_dt timestamp
Дата и время формирования метрики
metric_type_id smallint
Тип метрики: 0 — Counter (счетчик), 1 — Gauge (уровень), 2 — Timer (время)
metric_name text
Название метрики
metric_name_ext text
Наименования агрегатов (std, max, min, sum, count, median и перцентили) для метрик типа Timer
metric_value double precision
Значение метрики

Данные каждого CSV-файла обрабатываются аналогично тому, как обрабатываются данные при загрузке таблицы через QDL. После обработки очередного файла в базе данных появляется таблица metric_archive_N, где N — номер из последовательности seq_metric_chunk. По окончании обработки таблица становится партицией партиционированной таблицы metric_archive. Партиционирование идет по двум столбцам: instance_id и metric_dt. При присоединении таблицы в качестве партиции задаются минимальная и максимальная границы значений столбца metric_dt. В дальнейшем при обращении к таблице metric_archive при указании условий по instance_id и metric_dt будет автоматически происходить выбор соответствующих партиций.