如何使用Logstash Mutate过滤器提取嵌套JSON字段至根层级
使用Logstash Mutate过滤器处理嵌套JSON结构
如果要把嵌套在a字段下的所有子字段提取到根层级,同时移除原a字段,分两种场景处理:
场景1:已知所有子字段名称
直接用mutate过滤器的rename和remove_field指令,逐个将嵌套字段映射到根层级,再删除原a字段:
filter { mutate { # 将[a]下的子字段重命名到根层级 rename => { "[a][b]" => "b" "[a][c]" => "c" # 有其他子字段的话继续添加 } # 移除原来的嵌套字段a remove_field => ["a"] } }
场景2:未知子字段名称(动态处理所有子字段)
如果a下的子字段数量或名称不确定,用ruby过滤器配合遍历操作更高效,自动提取所有子字段到根层级:
filter { ruby { code => " # 取出a字段的所有键值对 event.get('a').each do |key, value| # 将键值对设置到根层级 event.set(key, value) end # 删除原a字段 event.remove('a') " } }
如果a字段可能不存在,建议在ruby代码里加判断避免报错:
filter { ruby { code => " if event.get('a').is_a?(Hash) event.get('a').each do |key, value| event.set(key, value) end event.remove('a') end " } }
内容的提问来源于stack exchange,提问作者aryan
相关产品推荐
相关产品推荐

