首页 > 解决方案 > 我可以在 Logstash 中创建一个单项数组吗?

问题描述

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

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

研究

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

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

我也尝试过将字段明确重新创建为数组,但没有成功。

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

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

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

标签: logstash

解决方案


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

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

您也可以使用 ruby​​ 过滤器来做到这一点,但我认为这更难理解:

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

推荐阅读