Функция Transformers стала общедоступной в сервисе Logpush от Cloudflare, позволяя командам обрабатывать журналы перед их экспортом в конечное место назначения. Пользователи могут писать SQL-запросы для фильтрации журналов, скрытия частей конфиденциальных данных, а также добавления, переименования, удаления или организации полей во вложенной структуре.
Функция предназначена для команд мониторинга и безопасности, которые экспортируют журналы Cloudflare в системы управления информацией и событиями безопасности (SIEM), аналитические платформы и объектные хранилища. Вместо запуска отдельного сервиса для обработки журналов после их поступления Logpush выполняет преобразование непосредственно в рамках экспортного процесса.
Что меняется на практике?
Пользователь определяет пользовательский Transformer для конкретного набора данных в Logpush. Предложение WHERE применяется для удаления ненужных журналов, а предложение SELECT определяет поля, которые появятся в экспортируемом журнале. Результаты сохраняются в формате NDJSON, как и исходные журналы; функция не предназначена для преобразования самого формата сериализации.
Например, можно исключить запросы проверок работоспособности и внутренний трафик, скрыть последнюю часть IP-адреса, унифицировать имена полей у нескольких провайдеров CDN, а также добавить постоянные поля, такие как имя провайдера или индикатор серверных ошибок. Фильтрация до экспорта помогает уменьшить объём данных, за экспорт, получение и хранение которых команды платят, а затем удаляют их.
Выполнение в рамках экспортного процесса
Cloudflare решила выполнять запросы внутри сервиса доставки Bufstream, а не полагаться на внешний сетевой сервис. По словам компании, выполнение WebAssembly через Cloudflare Workers добавило бы сетевое соединение в процесс Logpush, что могло бы привести к тайм-аутам и повторным попыткам, влияющим на задержку доставки и пропускную способность.
Transformers использует написанный на Rust движок Apache DataFusion, а также Apache Arrow для представления данных в типизированных столбцах в памяти. В ходе теста Cloudflare на искусственной партии из 5 000 журналов http_requests выполнение предварительно настроенного Transformer заняло около 3 миллисекунд на одном потоке Go, что соответствует примерно 1,6 миллиона журнала в секунду.
Bufstream принимает сжатые пакеты Logpush, преобразует подходящие журналы в Arrow RecordBatch, а затем передаёт их в DataFusion через Arrow IPC и интерфейс взаимодействия между Go и Rust. После выполнения запроса сервис возвращает результаты в NDJSON, затем объединяет и сжимает их и загружает в указанное место назначения.
Контроль сбоев и управление
Transformers работает по принципу безопасного отказа: если преобразование невозможно выполнить, Bufstream не отправляет пакет в исходном виде и не предоставляет его месту назначения. Вместо этого сервис выполняет экспоненциальные повторные попытки, сообщает об ошибке и может отключить задания, которые длительное время остаются в состоянии сбоя, чтобы они не потребляли ресурсы исправно работающих заданий.
Преобразования можно создавать, предварительно просматривать и управлять ими через Transformer Studio на панели Cloudflare или с помощью API. Каждое обновление также создаёт новую версию, а экран Transformer Health предоставляет показатели успешно и неуспешно выполненных преобразований, объёма данных до и после обработки и продолжительности выполнения.
Почему эта новость важна?
Основная ценность заключается не просто в добавлении SQL в сервис журналов, а в переносе решений по сокращению, унификации и сокрытию данных на этап до экспорта. Это может уменьшить зависимость команд от специализированных уровней обработки, но не устраняет необходимость тестировать запросы и проверять схемы данных, особенно поскольку сбой Transformer препятствует отправке пакета, вместо того чтобы передать необработанную версию.
Transformers доступна на тарифных планах Free, Pro, Business и Enterprise. Детали настройки и цены по-прежнему регулируются актуальной документацией Cloudflare.