INTEGRITY Документация

Transformers

Бета

Transformers позволяют выполнить SQL-запрос над каждым пакетом записей до того, как Logpush доставит их получателю. Используйте их, чтобы отфильтровать ненужные записи, привести поля в соответствие с целевой схемой, скрыть конфиденциальные значения, вычислить новые поля или добавить статические метаданные.

Логика записывается в виде одного SQL-запроса, который прикрепляется к заданию Logpush, и Cloudflare выполняет его для каждого пакета данных. Запрос FROM указывает набор данных Logpush (например, http_requests или audit_logs_v2) и имена полей берутся из схемы этого набора данных.

Ключевые функции

Прежде чем начать, вам потребуется:

Access Transformers

Трансформеры можно создавать, просматривать, подключать и настраивать через панель управления Cloudflare или API.

Transformer Studio (UI)

Transformer Studio представляет собой рабочую область с редактором SQL, где вы пишете, просматриваете и создаёте Transformers, а также управляете ими. Откройте её со страницы Logpush в дашборде Cloudflare.

Перейдите в Logpush ↗

В Studio вы можете:

API

Все действия трансформера доступны через Cloudflare API. Для аутентификации используйте API-токен на Logs Write разрешение.

Операция Метод Конечная точка
Список трансформеров GET accounts/:account_id/logpush/transformers
Создание трансформера POST accounts/:account_id/logpush/transformers
Просмотр трансформера POST accounts/:account_id/logpush/transformers/preview
Получение трансформера GET accounts/:account_id/logpush/transformers/:id
Скачать SQL GET accounts/:account_id/logpush/transformers/:id/content
Список версий GET accounts/:account_id/logpush/transformers/:id/versions
Обновление трансформера PUT accounts/:account_id/logpush/transformers/:id
Удалить трансформер DELETE accounts/:account_id/logpush/transformers/:id

Чтобы подключить или отключить трансформатор от задания, задайте transformer_id для задания Logpush. См. Настройка задания Logpush для конечных точек заданий.

Контракт SQL-трансформера

Трансформер представляет собой один SQL-запрос. Исходной таблицей служит набор данных Logpush, а результат запроса становится доставляемой записью.

SELECT ClientIP, RayID, EdgeResponseStatus
FROM http_requests
WHERE EdgeResponseStatus >= 400

FROM имя таблицы должно совпадать с набором данных задания Logpush, к которому привязан трансформер. В противном случае привязка завершится ошибкой.

Записи, которые не соответствуют WHERE исключаются из вывода.

Поддерживаемый SQL

Transformers используют тот же диалект SQL, что и Cloudflare Pipelines. Поддерживаются следующие операции:

Не поддерживается

Проверка

Каждый SQL-запрос перед сохранением проверяется на соответствие схеме целевого набора данных. Неизвестные поля, неверные типы, синтаксические ошибки, неизвестные наборы данных и неподдерживаемые операции отклоняются уже на этапе загрузки.

В панели управления ошибки проверки отображаются прямо в редакторе с указанием номера строки и столбца. Через API они возвращаются в errors массив ответа.

Лимиты

Лимит Значение
Размер SQL-запроса 10 KB
Длина имени Transformer 255 байт
Длина описания Transformer 4,096 байт
Доступ к файловой системе из запроса None
Сетевой доступ из запроса None
Размер блока пакета 1,000 строк

Примеры

Приведённые ниже примеры используют все возможности из Ключевые функции в одном запросе. Каждый оставляет подмножество записей, преобразует оставшиеся и отбрасывает поля, которые не нужны последующей части конвейера.

Фильтрация и преобразование записей журнала аудита

Этот трансформатор сохраняет только update действия из журнала аудита и преобразует оставшиеся записи для дальнейшей доставки. В частности, он:

Входная запись из audit_logs_v2 набор данных:

{
  "ActionType": "update",
  "ActorEmail": "[email protected]",
  "ActorID": "a1b2c3d4",
  "ActorIPAddress": "203.0.113.42",
  "ActorType": "user",
  "ActionTimestamp": "2026-05-21T15:00:00Z",
  "AccountID": "90796717",
  "ResourceID": "r1s2t3u4",
  "ResourceType": "zone",
  "ActorContext": "dashboard"
}

Transformer:

SELECT
  extract(epoch FROM to_timestamp(ActionTimestamp)) AS unix_ts,
  UPPER(ActionType) AS action_type,
  'Cloudflare' AS provider,
  named_struct(
    'type', ActorType,
    'email', ActorEmail,
    'ip', ActorIPAddress
  ) AS actor,
  ResourceType = 'zone' AS is_zone,
  [ResourceType, ResourceID] AS resource_meta
FROM audit_logs_v2
WHERE ActionType = 'update'

Доставленная запись:

{
  "action_type": "UPDATE",
  "actor": {
    "email": "[email protected]",
    "ip": "203.0.113.42",
    "type": "user"
  },
  "is_zone": true,
  "provider": "Cloudflare",
  "resource_meta": ["zone", "r1s2t3u4"],
  "unix_ts": 1779375600
}

Фильтрация и преобразование записей HTTP-запросов

Этот трансформатор сохраняет весь HTTP-трафик кроме проверки работоспособности, сборщики метрик и внутренние имена хостов. Это распространенный подход для команд, которым нужен полный поток журналов без предсказуемого шума. А именно, он:

Входная запись из http_requests набор данных:

{
  "ClientIP": "203.0.113.42",
  "ClientRequestHost": "example.com",
  "ClientRequestMethod": "POST",
  "ClientRequestPath": "/api/checkout",
  "ClientRequestUserAgent": "curl/7.85.0",
  "EdgeResponseStatus": 502,
  "EdgeStartTimestamp": "2026-05-21T15:00:00Z",
  "RayID": "8e2a1c60ef9e1c9a",
  "OriginResponseTime": 3200000000,
  "WAFAction": "unknown"
}

Этот пример предполагает EdgeStartTimestamp передается в виде строки формата RFC3339. Если ваше задание передает временные метки в виде наносекунд Unix, уберите to_timestamp() обёртку и вместо этого делите на 1e9.

Transformer:

SELECT
  extract(epoch FROM to_timestamp(EdgeStartTimestamp)) AS unix_ts,
  UPPER(ClientRequestMethod) AS method,
  'Cloudflare' AS provider,
  named_struct(
    'host', ClientRequestHost,
    'path', ClientRequestPath,
    'method', ClientRequestMethod
  ) AS request,
  EdgeResponseStatus >= 500 AS is_server_error,
  [ClientRequestHost, ClientRequestPath] AS request_meta
FROM http_requests
WHERE ClientRequestHost NOT IN ('internal.example.com', 'health.example.com')
  AND ClientRequestPath NOT LIKE '/healthz%'
  AND ClientRequestPath NOT LIKE '/metrics%'

Доставленная запись:

{
  "is_server_error": true,
  "method": "POST",
  "provider": "Cloudflare",
  "request": {
    "host": "example.com",
    "method": "POST",
    "path": "/api/checkout"
  },
  "request_meta": ["example.com", "/api/checkout"],
  "unix_ts": 1779375600
}

Ошибки и устранение неполадок

Ошибки API

HTTP Сообщение Причина
403 transformer feature is not available for this account У вашего аккаунта нет доступа к Transformers. Обратитесь к менеджеру Cloudflare по работе с вашим аккаунтом (Account Executive).
400 missing required field: name Добавьте name в тело запроса.
400 missing required field: code Добавьте непустой code своим SQL-запросом.
400 Ошибка проверки схемы (неизвестный столбец, недопустимый синтаксис) SQL-запрос ссылается на несуществующее поле, использует неподдерживаемый синтаксис или содержит несоответствие типов. Исправьте запрос и повторите попытку.
413 (слишком большой размер запроса) SQL-запрос превышает 10 КБ. Сократите запрос.
400 transformer N not found for this account Идентификатор трансформера не существует либо принадлежит другому аккаунту.
400 transformer N dataset "X" does not match job dataset "Y" Трансформера FROM таблица не соответствует набору данных задания.

Сбои во время выполнения

Если при обработке пакета трансформер завершается с ошибкой, весь пакет считается не обработанным: он не доставляется, в задании Logpush фиксируется ошибка, и Logpush повторяет попытку по обычному расписанию. Автоматического отката к необработанным (raw) журналам не предусмотрено.

Если сбои продолжаются, записи в затронутых пакетах в итоге отбрасываются и не подлежат восстановлению.

Последняя ошибка отображается на last_error . Частые причины:

Для отладки откройте трансформатор в Transformer Studio и используйте Запуск кнопку, чтобы просмотреть результат на примере записи. Логика проверки и выполнения та же самая, поэтому проблемы, заметные в продакшене, обычно воспроизводятся и в предпросмотре.