Logstash管道JSON结构调整:移除result嵌套层级
如何在Logstash中将嵌套的
result字段内容提升到_source根目录 要实现把_source下result嵌套的所有字段移到根层级,同时删除result字段,可以通过Logstash的filter插件完成,以下是两种适配不同场景的方案:
方案1:逐个字段迁移(适合字段数量少的场景)
使用mutate插件的rename和remove_field动作,直接指定需要迁移的字段:
filter { mutate { # 将result下的字段迁移到_source根目录 rename => { "[result][incident_state]" => "incident_state" "[result][u_agent_name]" => "u_agent_name" "[result][number]" => "number" "[result][time_worked]" => "time_worked" "[result][problem_id]" => "problem_id" "[result][cause]" => "cause" "[result][assigned_to]" => "assigned_to" } # 删除不再需要的result字段 remove_field => ["result"] } }
方案2:批量迁移字段(适合字段数量多的场景)
如果result下包含大量字段,不想逐个手动指定,可以用ruby插件编写脚本批量处理:
filter { ruby { code => " result_data = event.get('result') # 确保result是哈希类型再执行后续操作 if result_data.is_a?(Hash) # 遍历result的所有键值对,添加到_event根层级 result_data.each do |field_key, field_value| event.set(field_key, field_value) end # 删除原result字段 event.remove('result') end " } }
注意事项
- 需确保
result字段的类型为哈希(Hash),脚本中的判断逻辑可避免因空值或非哈希类型导致的报错。 - 如果
_source根目录已存在与result下同名的字段,迁移时会直接覆盖原有字段,如有冲突需提前处理。
内容的提问来源于stack exchange,提问作者P N Jain
相关产品推荐
相关产品推荐

