
Cloudflare додав SQL Transformers до конвеєра експорту Logpush
Logpush від Cloudflare фільтрує логи за допомогою SQL Transformers перед експортом, приховує чутливі дані та змінює поля. Команди пишуть запити для наборів даних і прив'язують збережену версію до відповідного NDJSON-завдання Logpush.
Що роблять Transformers
Cloudflare зробив Logpush доступним на всіх тарифних планах і запустив Transformers для того ж робочого процесу експорту. Командам спостережуваності тепер доступні фільтрація записів, приховування чутливих значень та переробка полів ще до того, як логи покидають Logpush для SIEM, аналітичних платформ або об'єктного сховища. Фільтрація перед доставкою може зменшити обсяг подальших даних і витрати, оскільки командам більше не потрібно експортувати, отримувати та зберігати записи, які видаляються після завантаження.
Transformer — це SQL-запит, який пишеться для одного набору даних Logpush. Logpush запускає цей запит на кожній партії перед експортом, видаляє записи, які не задовольняють умову WHERE, і використовує результат SELECT як експортований запис NDJSON. Команди можуть додавати, перейменовувати, видаляти або вставляти поля, включно з додаванням статичного поля provider, щоб нормалізувати записи, що надходять з кількох CDN.
Як працює виконання
Користувачі створюють, попередньо переглядають та керують Transformers у Transformer Studio або через API, а потім прив'язують збережену версію до сумісного NDJSON-завдання Logpush, яке використовує той самий набір даних. Кожне оновлення створює нову версію. Cloudflare зберігає SQL-запит у R2, а Bufstream отримує його через багатошаровий кеш, один раз готує логічний план DataFusion для тимчасового вікна завдання і повторно використовує його для кожної Arrow-партії в тому ж вікні.
Bufstream отримує стиснені Cap'n Proto партії від Buftee, розпаковує їх, парсить відповідні логи та збирає типізований Apache Arrow RecordBatch перед виконанням. Apache DataFusion і Arrow були обрані тому, що DataFusion вже обробляє Cloudflare Basin. Сервіс на Go передає буфери Arrow IPC до двигуна Rust через межу FFI, яка визначена через C ABI і викликається через cgo. Go передає вказівник на буфер введення лише для викликів cgo, буфер виведення належить Rust, а Go копіює цей результат у керовану пам'ять Go, перш ніж звільнити алокацію Rust.
Доставка, здоров'я та усунення несправностей
Transformers створені для роботи за принципом fail closed. Якщо трансформація не виконується, Bufstream не зсуває офсет доставки завдання вперед і не надсилає нетрансформовані партії, натомість повторює невдалі трансформації. Він поступово збільшує інтервали повторних спроб, фіксує помилки на завданні та вимикає завдання, які тривалий час перебувають у невдалому стані. Перегляд Transformer Health показує успішні та невдалі трансформації, обсяг даних до та після трансформації, а також тривалість трансформації.
Після виконання Bufstream перетворює результат Arrow на NDJSON, групує логи в партії та стискає їх gzip, потім завантажує у налаштоване місце призначення та регулює goroutine-и завантаження в межах лімітів конкурентності місця призначення. Компанія заявила, що ширший конвеєр даних обробляє понад мільярд подій за секунду, а Bufstream подає понад 110 мільйонів записів Logpush за секунду. Transformers доступні на тарифних планах Free, Pro, Business та Enterprise.
Джерела: The Cloudflare Blog
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.