如何提取 json 日志中方括号字段内的值
How to extract values within square brackets fields in a json log
我是使用 logstash 的新手,我需要以下 json 日志格式方面的帮助:
{
"field1" :[
{
"sub_field1": {
"sub_field2":"value X"
"sub_field3": {"sub_field4":"value Y"}
}
"sub_field5":"value W"
}
]
}
我想知道如何使用 mutate 获得值 X、值 Y 和值 W:"Add_field"。
提前致谢!
假设你在field1
下只有一个数组元素,那就是:
add_field => {
sub_field1 => '%{[field1][0][sub_field1]}'
sub_field2 => '%{[field1][0][sub_field1][sub_field2]}'
...
}
测试这个的好方法 -- 创建一个名为 test.json
的文件
{ "field1" :[ { "sub_field1": { "sub_field2":"value X","sub_field3": {"sub_field4":"value Y"} }, "sub_field5":"value W" } ] }
创建一个类似 test.conf
的配置文件:
{
stdin { codec => 'json_lines' }
}
filter {
mutate {
add_field => {
sub_field1 => '%{[field1][0][sub_field1]}'
sub_field2 => '%{[field1][0][sub_field1][sub_field2]}'
}
}
}
output {
stdout { codec => "rubydebug" }
}
然后运行它:cat test.json | bin/logstash -f test.conf
你会得到这样的输出:
{
"field1" => [
[0] {
"sub_field5" => "value W",
"sub_field1" => {
"sub_field3" => {
"sub_field4" => "value Y"
},
"sub_field2" => "value X"
}
}
],
"@timestamp" => 2020-02-17T17:26:59.471Z,
"@version" => "1",
"host" => "xxxxxxxx",
"sub_field2" => "value X",
"sub_field1" => "{\"sub_field3\":{\"sub_field4\":\"value Y\"},\"sub_field2\":\"value X\"}",
"tags" => []
}
其中显示 sub_field2
和 sub_field1
。
如果您无法预测字段名称,那么您将需要求助于 ruby 过滤器或类似的东西。如果您需要吐出多个元素,则需要使用此处评论中讨论的一种策略:
我是使用 logstash 的新手,我需要以下 json 日志格式方面的帮助:
{
"field1" :[
{
"sub_field1": {
"sub_field2":"value X"
"sub_field3": {"sub_field4":"value Y"}
}
"sub_field5":"value W"
}
]
}
我想知道如何使用 mutate 获得值 X、值 Y 和值 W:"Add_field"。
提前致谢!
假设你在field1
下只有一个数组元素,那就是:
add_field => {
sub_field1 => '%{[field1][0][sub_field1]}'
sub_field2 => '%{[field1][0][sub_field1][sub_field2]}'
...
}
测试这个的好方法 -- 创建一个名为 test.json
{ "field1" :[ { "sub_field1": { "sub_field2":"value X","sub_field3": {"sub_field4":"value Y"} }, "sub_field5":"value W" } ] }
创建一个类似 test.conf
的配置文件:
{
stdin { codec => 'json_lines' }
}
filter {
mutate {
add_field => {
sub_field1 => '%{[field1][0][sub_field1]}'
sub_field2 => '%{[field1][0][sub_field1][sub_field2]}'
}
}
}
output {
stdout { codec => "rubydebug" }
}
然后运行它:cat test.json | bin/logstash -f test.conf
你会得到这样的输出:
{
"field1" => [
[0] {
"sub_field5" => "value W",
"sub_field1" => {
"sub_field3" => {
"sub_field4" => "value Y"
},
"sub_field2" => "value X"
}
}
],
"@timestamp" => 2020-02-17T17:26:59.471Z,
"@version" => "1",
"host" => "xxxxxxxx",
"sub_field2" => "value X",
"sub_field1" => "{\"sub_field3\":{\"sub_field4\":\"value Y\"},\"sub_field2\":\"value X\"}",
"tags" => []
}
其中显示 sub_field2
和 sub_field1
。
如果您无法预测字段名称,那么您将需要求助于 ruby 过滤器或类似的东西。如果您需要吐出多个元素,则需要使用此处评论中讨论的一种策略: