On October 12, Cloudflare published a deeper look at Logpush Transformers: SQL that filters, redacts, and reshapes log batches before they reach a destination. The feature had already reached general availability during Birthday Week; yesterday’s post explains its execution and failure behavior. That distinction matters: this is a current engineering explanation, rather than a claim that the feature launched yesterday. Cloudflare’s technical post
For a team paying to ingest logs it immediately discards, the attraction is clear. Remove unwanted data earlier, and the destination has less to process. But moving a filter upstream also moves a decision about what future investigations can see.
The useful question is which evidence you can afford to lose, and what happens when the transformation itself stops working.
Start with an investigation, then choose the fields
Imagine a checkout incident. A customer reports a failed payment, but the application dashboard shows no obvious spike. An engineer needs to connect the complaint to a request, establish when it happened, and distinguish an edge failure from an application response.
For this illustrative case, a small exported record might contain:
{
"request_id": "example-request",
"timestamp": "2026-10-13T06:00:00Z",
"service": "checkout",
"status": 502
}
That is a starting point for discussion, not a sufficient schema for every investigation. Latency analysis might require duration. Routing failures might require a safe host identifier. Distinguishing origin and edge behavior might require separate status fields.
Write down the questions each destination must answer before removing fields. A security destination and a product dashboard may need different records. Giving both the same reduced schema can save configuration work while quietly making one of them ineffective.
I would review every proposed deletion against a concrete question: if this field disappears, which investigation becomes harder? If nobody can name a useful question, keeping the field indefinitely deserves scrutiny too.
Dropping records changes what a percentage means
Cloudflare’s documentation defines a direct contract: the SQL output becomes the delivered record, and records excluded by the filter are dropped. The supported operations include projection and filtering; joins and aggregations are unavailable. This is a place to shape individual records, not calculate a complete reporting model. Transformer SQL contract
Suppose, illustratively, a system receives 10,000 requests and 100 fail. Exporting only failures preserves 100 useful records, but that stream cannot independently establish the original one-percent failure rate. Its denominator has disappeared.
That filter may still be exactly right for an error investigation destination. It becomes misleading when someone later uses the same stream to compare overall traffic, conversion, or reliability.
Health checks deserve similar care. Removing every request to a health endpoint sounds reasonable until a broken dependency makes those requests the most useful evidence. One possible policy is to remove successful checks while retaining failures. Whether that fits depends on the purpose of the destination.
Name the resulting dataset accordingly. A stream of selected failures should not appear in a dashboard as though it represents all requests. Document the inclusion rule alongside the fields.
Redaction should begin before the export stage
There is a difference between removing a field from an exported record and preventing that field from being collected in the first place.
OpenTelemetry’s sensitive-data guidance recommends minimizing collection and describes processing techniques for removing or transforming sensitive information. A downstream redaction stage is useful, but its position in the pipeline limits what it protects. OpenTelemetry guidance
My practical recommendation is to use export transformation as an additional boundary. It does not establish that an earlier application log, queue, or diagnostic dump never contained the original value.
Prefer an explicit list of exported fields where the investigation permits it. Then inspect the values of those fields. A harmless-looking path can contain an email address or an account identifier. An error message can embed a request payload. Choosing safe field names does not make their contents safe.
There is also a real debugging tradeoff. Removing an identifier can make it harder to connect related events. Decide whether correlation is needed, for how long, and within which access boundary. Avoid promising that a masked or hashed identifier makes an entire dataset anonymous.
A failed transform can become missing evidence
Cloudflare documents no automatic fallback to untransformed logs when a Transformer fails. The failed batch is retried; persistent failures can eventually leave records unrecoverable. Runtime failure documentation
That behavior protects the intended output boundary. It also means a transformation problem can interrupt the evidence stream during an incident.
Treat freshness as a separate question from application health. A quiet dashboard might mean fewer errors, a filter that excludes too much, or a delivery problem. Those explanations call for different actions.
For an important destination, I would monitor the last successful arrival and compare expected activity with delivered records. Transformation errors should have an owner who can investigate them. A volume reduction alone is ambiguous: it can represent successful filtering or failed delivery.
The recovery path should preserve the intended restrictions. Reverting to a previously reviewed transformation may be appropriate. Detaching a redaction transform to restore volume changes which data leaves the system and needs a separate decision.
Test the questions that must survive
A preview confirms behavior on the supplied input. It cannot establish that the chosen sample represents production traffic.
Build a small set of sanitized examples around the questions your team expects to answer: an ordinary success, a checkout failure, a failed health check, a missing optional field, and a value containing an unexpected identifier. Check both the exported fields and the records that disappear.
Then have the destination’s owner use the transformed output. Can they find a request, distinguish the relevant failure types, and explain the scope of the dataset? This catches losses that a syntax check cannot.
Roll out one destination at a time. Record the transformation version, compare delivery freshness and useful queries, and retain a reviewed way to reverse the configuration change. Reversing a filter later does not recreate records already excluded from that destination.
Filtering before export can make a data pipeline smaller and easier to operate. The strongest design starts with the investigations that must remain possible, then removes everything those investigations do not require. The result should be a deliberate view of the system whose limits are visible to the people relying on it.