我正在使用logstash通过xml过滤器插件接收xml消息。考虑以下xml示例:
filter {
xml {
source => "message"
force_array => false
target => "fruit"
}
}
我的过滤器配置如下:
...
"Apple": {
...
},
"Apple": {
...
}
...
发送到elasticsearch的过滤器之后的结果是:
Apple
如您所见,我无法区分producer1
与producer2
还是{{1}}。我在过滤器配置中使用了remove_namespaces设置,但似乎没有任何效果。如何确保前缀信息保留在弹性搜索的输出中?
答案 0 :(得分:0)
在Elasticsearch 2.0中,字段名称中不允许使用点。可能这就是xml过滤器可能已通过这种方式编码的原因。您可以尝试添加另一个过滤器,以将点更改为下划线或其他形式。红宝石过滤器应在此处提供帮助-https://discuss.elastic.co/t/field-name-cannot-contain/33251/38
答案 1 :(得分:0)
Elasticsearch在字段名称中不喜欢.
或:
。解决方案是在XML过滤器之前对原始消息使用gsub
。
filter {
mutate {
gsub => [
"message", "fruit.producer1:Apple", "fruit_producer1_Apple",
"message", "fruit.producer2:Apple", "fruit_producer2_Apple"
]
}
xml {
source => "message"
force_array => false
target => "fruit"
}
}
结果:
"fruit": {
"fruit_producer1_Apple": {
...
},
"fruit_producer2_Apple": {
...
},
...
}