Logstash 如何彻底删除 message 字段(含批量与条件删除)?

Logstash 删除 message 字段的完整方案:mutate remove_field 基础用法、prune 插件白名单保留、按条件删除、以及输出层控制。附各方案适用场景对比。

最佳实践
Logstash 如何彻底删除 message 字段(含批量与条件删除)?封面

基础答案是 mutate { remove_field => ["message"] };如果需要"只留少数字段、其余全删",用 prune 插件的白名单模式更合适。

基础:mutate remove_field

mutate {
  remove_field => ["message", "path", "host"]   # 可一次删多个
}

进阶:prune 白名单

只保留指定字段,其余(含 message)全部删除:

prune {
  whitelist_names => ["@timestamp", "level", "service", "trace_id", "duration"]
}

适合字段多且杂、只想保留已知好字段的场景。

条件删除

if [level] == "DEBUG" {
  mutate { remove_field => ["message"] }
}

注意事项

  • 删除发生在管道内,ES 里不会留下任何痕迹——删错了没有后悔药,先小流量验证;
  • beats 输入自带 message 字段,Filebeat 的 message 与自定义字段并存时确认删的是哪个。

常见问题(FAQ)

Q:prune 和 remove_field 能混用吗? 可以,注意执行顺序(按配置书写顺序)。

Q:删除后 @metadata 还在吗? @metadata 本就不入输出,与 remove_field 无关。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台