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"] }
}
常见问题(FAQ)
Q:删了 message 全文检索还能用吗? 取决于剩余字段是否入索引——保留关键字段的 text 映射即可。
Q:能省多少存储? 取决于原文长度、剩余字段和索引设置。用同批日志对比处理前后的索引大小,避免只按 message 字节数推算。