Движок FileLog
Этот движок позволяет обрабатывать лог-файлы приложений как поток записей.
FileLog
позволяет вам:
- Подписываться на лог-файлы.
- Обрабатывать новые записи по мере их добавления в подписанные лог-файлы.
Создание таблицы
Аргументы движка:
path_to_logs
– Путь к лог-файлам для подписки. Это может быть путь к директории с лог-файлами или к одному лог-файлу. Обратите внимание, что ClickHouse позволяет использовать только пути в директорииuser_files
.format_name
- Формат записи. Обратите внимание, что FileLog обрабатывает каждую строку в файле как отдельную запись, и не все форматы данных подходят для этого.
Дополнительные параметры:
poll_timeout_ms
- Таймаут для одного опроса из лог-файла. По умолчанию: stream_poll_timeout_ms.poll_max_batch_size
— Максимальное количество записей, которые могут быть опрошены за один раз. По умолчанию: max_block_size.max_block_size
— Максимальный размер партии (в записях) для опроса. По умолчанию: max_insert_block_size.max_threads
- Максимальное количество потоков для парсинга файлов, по умолчанию 0, что означает, что это будет max(1, physical_cpu_cores / 4).poll_directory_watch_events_backoff_init
- Начальное значение ожидания для потока, наблюдающего за директорией. По умолчанию:500
.poll_directory_watch_events_backoff_max
- Максимальное значение ожидания для потока, наблюдающего за директорией. По умолчанию:32000
.poll_directory_watch_events_backoff_factor
- Скорость отката, по умолчанию экспоненциальная. По умолчанию:2
.handle_error_mode
— Как обрабатывать ошибки для движка FileLog. Возможные значения: default (исключение будет выброшено, если не удастся распарсить сообщение), stream (сообщение об исключении и необработанное сообщение будут сохранены в виртуальных столбцах_error
и_raw_message
).
Описание
Доставленные записи отслеживаются автоматически, поэтому каждая запись в лог-файле считается только один раз.
SELECT
не особенно полезен для чтения записей (кроме отладки), поскольку каждая запись может быть прочитана только один раз. Практичнее создать потоки в реальном времени с использованием материализованных представлений. Для этого:
- Используйте движок для создания таблицы FileLog и рассматривайте её как поток данных.
- Создайте таблицу с нужной структурой.
- Создайте материализованное представление, которое преобразует данные из движка и помещает их в ранее созданную таблицу.
Когда MATERIALIZED VIEW
подключается к движку, он начинает собирать данные в фоновом режиме. Это позволяет вам постоянно получать записи из лог-файлов и преобразовывать их в необходимый формат с помощью SELECT
.
Одна таблица FileLog может иметь столько материализованных представлений, сколько вы хотите, они не читают данные непосредственно из таблицы, а получают новые записи (пакетами), таким образом вы можете записывать в несколько таблиц с разным уровнем детализации (с группировкой - агрегацией и без).
Пример:
Чтобы остановить прием данных потоков или изменить логику преобразования, отключите материализованное представление:
Если вы хотите изменить целевую таблицу, используя ALTER
, мы рекомендуем отключить материализованное представление, чтобы избежать несоответствий между целевой таблицей и данными из представления.
Виртуальные столбцы
_filename
- Имя лог-файла. Тип данных:LowCardinality(String)
._offset
- Смещение в лог-файле. Тип данных:UInt64
.
Дополнительные виртуальные столбцы при handle_error_mode='stream'
:
_raw_record
- Необработанная запись, которую не удалось распарсить. Тип данных:Nullable(String)
._error
- Сообщение об исключении, произошедшем во время неудачного парсинга. Тип данных:Nullable(String)
.
Примечание: виртуальные столбцы _raw_record
и _error
заполняются только в случае исключения во время парсинга, они всегда NULL
, когда сообщение было успешно распарсено.