Cloudflare가 10월 12일 Logpush Transformers의 동작 방식을 설명하는 기술 글을 냈다. Logpush는 Cloudflare 로그를 SIEM, 분석 플랫폼, 객체 스토리지로 내보내는 기능이다.

Transformers는 Birthday Week에 이미 일반 제공(GA)을 시작했다. 10월 12일 글은 신규 출시가 아니라 기존 기능의 기술 설명이다.

로그 필터링이나 민감 정보 제거를 어디서 할지 고르는 팀에게 핵심은 변환 실패가 변환 우회로 이어지지 않는다는 점이다.

NDJSON 작업에 붙는 단일 SQL 쿼리

Transformer는 Logpush가 배치를 전달하기 전에 레코드에 SQL 쿼리 하나를 적용한다. WHERE는 남길 레코드를 고르고, SELECT 결과가 전달되는 레코드가 된다.

연결 대상은 같은 데이터셋을 쓰는 NDJSON 출력 작업이어야 한다. FROM의 테이블 이름이 작업의 데이터셋과 다르면 연결이 실패한다.

범위가 정해진 레코드 변환이지 범용 SQL 데이터웨어하우스가 아니다. 조인, 서브쿼리, 집계, 윈도 함수, ORDER BY는 지원하지 않는다.

Logpush 전달 프로세스 안에서 실행되는 변환

기술 글에 따르면 변환은 별도 원격 호출 없이 Logpush 전달 서비스 안에서 Rust 쿼리 엔진 Apache DataFusion으로 실행된다. 초기 시제품은 Workers를 호출했지만 전달 경로에 네트워크 호출이 생겨 이 방식을 택했다.

변환을 실행할 수 없으면 작업의 전달 오프셋을 진행하지 않고, 변환하지 않은 배치도 보내지 않는다. Cloudflare는 이를 실패 시 차단(fail closed) 설계로 설명한다.

Logpush는 재시도 간격을 점점 늘리고 작업에 오류를 보고한다. 실패 상태가 오래 이어진 작업은 자동으로 비활성화된다.

주의할 점: 재시도는 보존 약속이 아니다

문서는 실패가 계속되면 해당 배치의 레코드가 결국 버려지고 복구할 수 없다고 적었다. 오프셋을 붙잡고 재시도한다고 무제한 보존이나 최종 전달이 보장되지는 않는다.

마지막 오류는 작업의 last_error 필드에 나타난다. 문서가 든 흔한 원인은 출력 크기 초과와 Cloudflare 내부 오류다.

절충은 분명하다. 변환하지 않은 로그가 밖으로 나가는 것을 막는 대신, 사고 조사에 필요한 스트림이 끊길 수 있다.

필터에서 Transformer로 옮길 때의 조건

한 Logpush 작업에는 필터와 Transformer 중 하나만 둘 수 있다. 대시보드의 Transformer Studio는 기존 필터를 같은 뜻의 SQL 조건식으로 바꿔 보여 주고, 이를 WHERE에 옮겨야 필터 동작이 유지된다.

API는 이 변환을 하지 않는다. 필터를 직접 SQL 조건으로 바꿔 WHERE에 넣은 뒤, 같은 작업 갱신 요청에서 filter를 비우고 transformer_id를 지정한다.

{
	"filter": "",
	"transformer_id": 42
}

filter를 비우지 않고 transformer_id만 지정하면 API는 400을 반환한다. 기존 선택 규칙을 옮기지 않고 새 SQL만 연결하면 밖으로 나가는 이벤트가 달라진다.

미리보기는 데이터셋별 샘플 레코드 하나를 기준으로 실행된다. 미리보기 성공이 모든 운영 사례를 거쳤다는 증거는 아니다.

SQL 문법보다 앞서는 출력 조건

도입은 가장 짧은 쿼리보다 원하는 출력 조건에서 출발하는 편이 맞다. 외부로 보내도 되는 필드, 조사용으로 남길 필드, 일부러 제외할 레코드를 먼저 정한다.

누락값이나 특이한 내용이 든 대표 레코드로 시험한 뒤 실제 전달 결과를 확인한다. 눈에 띄는 식별자 하나를 지우거나 이름을 바꿨다고 나머지 필드의 민감 정보까지 사라진 것은 아니다.

이 부분은 SQL 문법 검사로 끝나지 않는 정책·데이터 검토다.

변환 성공과 레코드 도착을 따로 보는 모니터링

모니터링은 변환이 성공하는지와 예상한 레코드가 도착하는지를 따로 답해야 한다.

전송량 감소는 필터링 효과일 수도, 지나치게 넓은 제외 조건일 수도, 멈춘 작업일 수도 있다. 승인한 쿼리와 예상 출력 예제를 보관해 두면 변경을 같은 기준으로 판단할 수 있다.

원본 로그 대체 전송은 복구 계획이 아니다. 실패한 변환은 진단하고 고치는 대상이다.

실패 시 차단은 전달 모니터링과 데이터 누락 대응 계획이 함께 있을 때 가치를 가지며, 어느 쪽도 대신하지 않는다.