我可以在Logstash中创建一个单项目数组吗?

我可以在Logstash中创建一个单项目数组吗?,logstash,Logstash,我有一个用例,其中字符串字段有时包含一个值,有时包含多个值。这会导致下游出现问题,因为我们的avro模式在此字段上指定类型“Array”,但有时会收到“String”类型 我没有办法更改下游逻辑,我宁愿避免将数组转换为串联字符串作为一种解决方法。有没有办法在Logstash中创建一个一项数组 研究 日志存储中有一个,但它不显式允许转换为字符串数组,并且以下操作不起作用: mutate { convert => {"FieldName" => "[

我有一个用例,其中字符串字段有时包含一个值,有时包含多个值。这会导致下游出现问题,因为我们的avro模式在此字段上指定类型“Array”,但有时会收到“String”类型

我没有办法更改下游逻辑,我宁愿避免将数组转换为串联字符串作为一种解决方法。有没有办法在Logstash中创建一个一项数组

研究

日志存储中有一个,但它不显式允许转换为字符串数组,并且以下操作不起作用:

mutate {
    convert => {"FieldName" => "[string]"}
}
我还尝试过显式地将字段重新创建为数组,但运气不佳

mutate {
    add_field => { "[FieldName_temp]" => "%{FieldName}" }
    remove_field => { "FieldName" }
}

mutate {
    rename => { "[FieldName_temp]" => "[FieldName]" }
}

我在Logstash中尝试的是可能的吗?

如果字段已经存在,公共过滤器选项add\u字段将把字符串转换为数组,或者将条目附加到数组中,然后可以删除数组中的最后一个条目

mutate { add_field => { "foo" => 2 } }
mutate { remove_field => [ "[foo][-1]" ] }
您也可以使用ruby过滤器来实现,但我认为这更难理解:

ruby { code => 'event.set("foo", [ event.get("foo") ].flatten)' }

谢谢你,这成功了!不是完全必要的,但是你知道这两种解决方案中哪一种更有效吗?我想ruby过滤器更有效,但两者都很便宜,我不会用它来决定它们之间的关系。