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

Can I create a one-item array in Logstash?

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

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

研究

Logstash 中有一个 convert filter,但它没有明确允许转换为字符串数组,以下内容不起作用:

mutate {
    convert => {"FieldName" => "[string]"}
}

我也曾尝试过将字段显式地重新创建为数组,但没有成功。

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

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

我正在尝试的东西在 Logstash 中是否可行?

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

mutate { add_field => { "foo" => 2 } }
mutate { remove_field => [ "[foo][-1]" ] }

您也可以使用 ruby 过滤器来完成,但我认为这更难理解:

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