Cloudflare의 Logpush 서비스에서 Transformers 기능을 정식으로 사용할 수 있게 되면서, 팀은 로그를 최종 목적지로 내보내기 전에 처리할 수 있게 됐다. 사용자는 SQL 쿼리를 작성해 로그를 필터링하고, 민감한 데이터 일부를 마스킹하며, 필드를 추가하거나 이름을 변경하거나 삭제하거나 중첩 구조 안에 배치할 수 있다.
이 기능은 Cloudflare 로그를 보안 정보 및 이벤트 관리(SIEM) 시스템, 분석 플랫폼 및 객체 스토리지로 내보내는 모니터링 및 보안 팀을 대상으로 한다. 로그가 도착한 후 별도의 서비스를 실행해 처리하는 대신, Logpush가 내보내기 경로 자체에서 변환을 수행한다.
실제로 무엇이 달라지는가?
사용자는 Logpush의 특정 데이터 세트에 맞춤형 Transformer를 정의한다. WHERE 문은 필요하지 않은 로그를 제거하는 데 적용되며, SELECT 문은 내보낸 로그에 표시될 필드를 지정한다. 결과는 원본 로그와 마찬가지로 NDJSON 형식으로 저장되며, 이 기능은 직렬화 형식 자체를 변환하는 도구가 아니다.
예를 들어 상태 확인 요청과 내부 트래픽을 제외하고, IP 주소의 마지막 부분을 마스킹하며, 여러 CDN 제공업체 사이에서 필드 이름을 통일하고, 제공업체 이름이나 서버 오류를 나타내는 지표와 같은 고정 필드를 추가할 수 있다. 내보내기 전에 필터링하면 팀이 내보내고 수신하고 저장한 뒤 나중에 폐기하는 데이터의 양을 줄이는 데 도움이 된다.
내보내기 경로 내부에서의 실행
Cloudflare는 외부 네트워크 서비스에 의존하는 대신 전달 서비스인 Bufstream 내부에서 쿼리를 실행하는 방식을 선택했다. 회사에 따르면 Cloudflare Workers를 통해 WebAssembly를 실행하면 Logpush 경로에 네트워크 연결이 추가되어, 전달 시간과 처리량에 영향을 줄 수 있는 시간 초과와 재시도가 발생할 수 있다.
Transformers는 Rust로 작성된 Apache DataFusion 엔진과, 메모리에서 데이터를 typed 열로 표현하기 위한 Apache Arrow를 사용한다. Cloudflare가 5,000개의 합성 http_requests 로그로 수행한 테스트에서 사전 구성된 Transformer의 실행에는 Go 단일 스레드 기준 약 3밀리초가 걸렸으며, 이는 초당 약 160만 개의 로그에 해당한다.
Bufstream은 압축된 Logpush 배치를 수신하고, 조건에 맞는 로그를 Arrow RecordBatch로 변환한 뒤 Arrow IPC와 Go-Rust 바인딩 인터페이스를 통해 DataFusion으로 전달한다. 쿼리 실행이 끝나면 서비스는 결과를 NDJSON으로 되돌린 다음 이를 묶고 압축해 지정된 목적지로 업로드한다.
실패 제어 및 관리
Transformers는 안전한 종료 원칙에 따라 작동한다. 변환을 실행할 수 없으면 Bufstream은 배치를 원시 형식으로 전송하지 않으며 전달 위치도 제공하지 않는다. 대신 점진적으로 재시도하고 오류를 보고하며, 장기간 실패 상태에 머무는 작업은 정상 작업의 리소스를 소모하지 않도록 비활성화할 수 있다.
Cloudflare 대시보드의 Transformer Studio 또는 API를 통해 변환을 생성하고 미리 보고 관리할 수 있다. 또한 업데이트할 때마다 새 버전이 생성되며, Transformer Health 화면에서는 성공 및 실패한 변환, 처리 전후의 데이터 양, 실행 시간에 대한 지표를 제공한다.
이 소식이 중요한 이유
핵심 가치는 단순히 로그 서비스에 SQL을 추가한 데 있지 않고, 데이터 축소와 통일 및 마스킹에 관한 결정을 내보내기보다 앞선 지점으로 옮긴 데 있다. 이는 팀이 맞춤형 처리 계층에 의존하는 정도를 줄일 수 있지만, 쿼리 테스트와 데이터 스키마 검토가 필요하지 않다는 의미는 아니다. 특히 Transformer가 실패하면 처리되지 않은 사본을 전달하는 대신 배치 전송 자체가 차단되기 때문이다.
Transformers는 Free, Pro, Business 및 Enterprise 요금제에서 제공된다. 설정과 가격에 관한 세부 사항은 현재 Cloudflare 문서에 따른다.