Logstash 能删除日志中的 message 字段吗?
可以——用 mutate 过滤器的 remove_field 删除 message 字段:mutate { remove_field => ["message"] }。结构化日志解析后删除原始 message 可显著减小 ES 存储。本文给出配置与注意事项。
可以。mutate { remove_field => ["message"] } 一行即可——典型场景是 grok/json 解析后,原始 message 已成冗余,删掉它能让 ES 索引体积明显下降。
配置示例
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
mutate {
remove_field => ["message"] # 解析完成后删掉原文
}
}
什么时候该删、什么时候保留
- 删:message 已完整解析成结构化字段,原文没有额外信息;
- 留:解析可能失败(保留原文兜底)、审计合规要求保留原始日志。
折中方案:只删解析成功的事件——
if "_grokparsefailure" not in [tags] {
mutate { remove_field => ["message"] }
}
观测云对照
观测云 DataKit Pipeline 中 drop_key(message) 实现同样效果,且支持按条件删除:解析失败自动保留原文。
常见问题(FAQ)
Q:删了 message 全文检索还能用吗? 取决于剩余字段是否入索引——保留关键字段的 text 映射即可。
Q:能省多少存储? 视日志长度,常见降幅 30-50%。