Logstash包装json对象

Logstash包装json对象,json,logstash,mutate,Json,Logstash,Mutate,我想包装一个通过http侦听器插件发送到Logstash的json对象,以便将其发送到Splunk。我得到一个对象,它看起来像: { "foo" : "text", "bar" : "text" } 我需要它看起来像: { "event" : { "foo" : "text", "bar" : "text" } } 我就是找不到如何访问顶级对象 配置: input { http { port => 8080

我想包装一个通过http侦听器插件发送到Logstash的json对象,以便将其发送到Splunk。我得到一个对象,它看起来像:

{ 
   "foo" : "text", 
   "bar" : "text" 
} 
我需要它看起来像:

{ "event" : 
  { 
     "foo" : "text", 
     "bar" : "text"
  } 
} 
我就是找不到如何访问顶级对象

配置:

input {
  http {
    port => 8080
    codec => "json"
  }
}

filter {
  mutate {
    rename => { "WHAT GOES HERE???" => "event" }
  }
}

output {
  stdout { codec => json }
}

非常感谢

您可以使用
重命名
添加字段

使用
重命名

mutate {
    rename => { "foo" => "[event][foo]" }
    rename => { "bar" => "[event][bar]" }
}
使用
add_字段

mutate {
    add_field => { "[event][foo]" => "%{[foo]}" }
    add_field => { "[event][bar]" => "%{[bar]}" }
}
mutate {
    remove_field => [ "foo", "bar" ]
}
如果使用
add_field
,则消息中会保留
foo
bar
字段,您可以使用
remove_field

mutate {
    add_field => { "[event][foo]" => "%{[foo]}" }
    add_field => { "[event][bar]" => "%{[bar]}" }
}
mutate {
    remove_field => [ "foo", "bar" ]
}

另一种优雅的方法是在过滤器中使用json目标:

filter {
   json {
      source => "message"
      target => "event"
   }
}

非常感谢,这会起作用,但是你知道我是否能抓取像“*”或所有字段之类的东西吗?不知何故,我的对象比刚才的
foo
bar
多了很多键,我希望避免将所有内容都放在这个配置中。你能分享你的对象的示例吗?如果它是一个json对象,也许您可以使用json过滤器来解析它,并将结果存储在一个json文件中。