Logstash从xml消息中删除前缀

时间:2018-09-20 03:05:26

标签: xml elasticsearch logstash elastic-stack

我正在使用logstash通过xml过滤器插件接收xml消息。考虑以下xml示例:

filter {
    xml {
        source => "message"
        force_array => false
        target => "fruit"
    }
}

我的过滤器配置如下:

...
"Apple": {
    ...
},
"Apple": {
    ...
}
...

发送到elasticsearch的过滤器之后的结果是:

Apple

如您所见,我无法区分producer1producer2还是{{1}}。我在过滤器配置中使用了remove_namespaces设置,但似乎没有任何效果。如何确保前缀信息保留在弹性搜索的输出中?

2 个答案:

答案 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": {
        ...
    },
    ...
}