logstash - 通过转换映射到 json 数组
logstash - map to json array with transformation
我有以下 json 文件,每一行都是不同的 json:
{"s":"some address","c":"some city"}
{"s":"some address1","c":"some city1"}
{"s":"some address2","c":"some city2"}
我有以下工作:
input {
file {
start_position => "beginning"
path => "/sources/someFile.txt"
}
}
filter {
json {
source => "a"
target => "addresses[0].street"
}
mutate {
remove_field => ["message", "@timestamp", "host", "path", "@version"]
}
}
output {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "store"
}
}
我想按如下方式写入索引(每个地址作为数组中的第一个元素转到不同的文档):
{
"addresses": [{"street" : "some address", "city" : "some city"}]
}
{
"addresses": [{"street" : "some address2", "city" : "some city1"}]
}
{
"addresses": [{"street" : "some address3", "city" : "some city2"}]
}
附加作业无效。没有错误,也没有做任何事情。
谢谢
您不能在 json 过滤器的目标选项中使用该字段引用。在过去几年的任何版本的 logstash 中,我都希望这会导致 _jsonparsefailure 标记和错误
Exception caught in json filter {:exception=>"Invalid FieldReference: `addresses[0].street`"
如果您将引用更改为 [addresses][0],那么它将 运行 没有错误,但引用将被解释为“addresses”哈希中的“0”条目,而不是地址数组中的第一个条目。
您传入的 JSON 字段名称错误,因此您必须重命名这些字段。我认为在 ruby 过滤器
中最简单
json { source => "message" target => "[@metadata][json]" }
ruby {
code => '
json = event.get("[@metadata][json]")
event.set("addresses", [ { "street" => json["s"], "city" => json["c"] } ] )
'
}
产生
"addresses" => [
[0] {
"city" => "some city",
"street" => "some address"
}
],
原始 JSON 放置在 [@metadata] 字段内,因此它可用但未被输出索引。
我有以下 json 文件,每一行都是不同的 json:
{"s":"some address","c":"some city"}
{"s":"some address1","c":"some city1"}
{"s":"some address2","c":"some city2"}
我有以下工作:
input {
file {
start_position => "beginning"
path => "/sources/someFile.txt"
}
}
filter {
json {
source => "a"
target => "addresses[0].street"
}
mutate {
remove_field => ["message", "@timestamp", "host", "path", "@version"]
}
}
output {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "store"
}
}
我想按如下方式写入索引(每个地址作为数组中的第一个元素转到不同的文档):
{
"addresses": [{"street" : "some address", "city" : "some city"}]
}
{
"addresses": [{"street" : "some address2", "city" : "some city1"}]
}
{
"addresses": [{"street" : "some address3", "city" : "some city2"}]
}
附加作业无效。没有错误,也没有做任何事情。
谢谢
您不能在 json 过滤器的目标选项中使用该字段引用。在过去几年的任何版本的 logstash 中,我都希望这会导致 _jsonparsefailure 标记和错误
Exception caught in json filter {:exception=>"Invalid FieldReference: `addresses[0].street`"
如果您将引用更改为 [addresses][0],那么它将 运行 没有错误,但引用将被解释为“addresses”哈希中的“0”条目,而不是地址数组中的第一个条目。
您传入的 JSON 字段名称错误,因此您必须重命名这些字段。我认为在 ruby 过滤器
中最简单json { source => "message" target => "[@metadata][json]" }
ruby {
code => '
json = event.get("[@metadata][json]")
event.set("addresses", [ { "street" => json["s"], "city" => json["c"] } ] )
'
}
产生
"addresses" => [
[0] {
"city" => "some city",
"street" => "some address"
}
],
原始 JSON 放置在 [@metadata] 字段内,因此它可用但未被输出索引。