Logstash包装json对象
我想包装一个通过http侦听器插件发送到Logstash的json对象,以便将其发送到Splunk。我得到一个对象,它看起来像: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
{
"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文件中。