logstash - 我可以在 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 中尝试的东西是否可行?
解决方案
如果字段已存在,常用过滤器选项 add_field 会将字符串转换为数组,或者将条目附加到数组中,然后您可以删除数组中的最后一个条目。
mutate { add_field => { "foo" => 2 } }
mutate { remove_field => [ "[foo][-1]" ] }
您也可以使用 ruby 过滤器来做到这一点,但我认为这更难理解:
ruby { code => 'event.set("foo", [ event.get("foo") ].flatten)' }
推荐阅读
- wpf - WPF 显示/隐藏多个窗口
- javascript - 云函数 onCreate 触发函数失败 HTTP 错误:400,请求有错误
- python-3.x - 如何减少针对文本处理和电影评论训练的简单神经网络的过度拟合
- python - 想澄清 heapq.nlargest 参数'key'
- react-native - KeyboardAvoidingView 应该是视图的底部
- javascript - 如何从呈现本地 HTML 的 WebView 执行跨域请求?
- php - 如何在 PHP/Laravel 中 POST 后保留克隆的字段值
- ios - 结合超时链接
- reactjs - 开玩笑:接听电话数:0
- jquery - 我的 jquery 代码在 safari 旧版本中不支持,但在最新版本和 chrome 上也可以正常工作