使用Transformers在导出前过滤、重塑和脱敏日志
内容提要
Cloudflare为Logpush推出Transformers功能,可在日志导出前用SQL查询过滤、脱敏和重塑数据,无需额外处理服务。该功能基于Apache DataFusion和Arrow,在Go编写的Bufstream中内嵌Rust查询引擎,实现高吞吐、低延迟的进程内转换,失败时自动重试并禁用问题任务。
延伸解读
为什么要把转换放在导出前
文章指出,团队通常需要单独部署、扩展和维护一个处理服务来过滤或脱敏日志,这增加了运维负担。Transformers 将处理移入 Logpush 导出流程,在数据离开 Cloudflare 前完成过滤和重塑,从而减少下游需要导出、摄取和存储的无效记录,可能降低相关成本。
进程内执行与远程调用的取舍
早期原型尝试在 Cloudflare Workers 中运行 WebAssembly 转换,但调用 Worker 会在导出路径中引入网络调用,可能带来超时和重试,影响吞吐和延迟。最终选择在 Bufstream 内嵌 Apache DataFusion,以进程内方式执行 SQL,避免额外网络跳数,并复用现有的调度、批处理和目的地控制。
Go 与 Rust 边界的数据交换
Bufstream 用 Go 编写,而 DataFusion 是 Rust 引擎。两者通过 Arrow IPC 在 FFI 边界交换类型化批次,Go 传入输入缓冲区指针,Rust 返回输出缓冲区,Go 复制后显式释放 Rust 分配。这种方式避免逐行解析 JSON 再重建列,保持批处理效率,同时明确跨语言内存所有权。
失败关闭与任务健康监控
Transformers 设计为失败关闭:如果转换无法执行,Bufstream 不会推进交付偏移量,也不会发送未转换的原始批次,而是重试。为防止持续失败的任务占用资源,重试会逐步延迟,长时间失败的任务会被自动禁用。用户可以在 Logpush 的 Transformer Health 视图中监控成功与失败次数、转换前后数据量以及转换耗时。
Q&A
Cloudflare Logpush Transformers 是什么?
Cloudflare Logpush Transformers 是一项功能,允许在日志导出前使用 SQL 查询过滤、脱敏和重塑日志数据,无需额外的处理服务。
Transformers 如何执行 SQL 查询?
Transformers 使用 Apache DataFusion 作为 SQL 执行引擎,它基于 Apache Arrow,提供向量化、列式执行。DataFusion 被嵌入到用 Go 编写的 Bufstream 中,通过 Arrow IPC 在 Go 和 Rust 之间高效传递数据。
使用 Transformers 有什么好处?
Transformers 可以在日志导出前进行过滤、脱敏和重塑,减少下游数据量和成本,避免部署和维护额外的处理服务,并确保数据以所需格式到达目的地。
Transformers 如何处理转换失败?
Transformers 设计为故障关闭:如果转换无法执行,Bufstream 不会推进作业的交付偏移量,也不会发送未转换的批次,而是重试失败的转换。持续失败的作业会被自动禁用。
如何创建和管理 Transformers?
可以通过 Cloudflare 仪表板中的 Transformer Studio 或 API 创建、预览和管理 Transformers。保存后,可以将其附加到使用相同数据集的兼容 NDJSON Logpush 作业。每次更新都会创建新版本。
Transformers 支持哪些日志格式?
Transformers 处理输入和输出均使用 NDJSON 格式。它不转换序列化格式,而是对 NDJSON 记录进行过滤、脱敏和重塑。