Logstash 如何彻底删除 message 字段(含批量与条件删除)?
Logstash 删除 message 字段的完整方案:mutate remove_field 基础用法、prune 插件白名单保留、按条件删除、以及输出层控制。附各方案适用场景对比。
基础答案是 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 无关。