Logstash удаляет префикс из xml сообщения - PullRequest
0 голосов
/ 20 сентября 2018

Я использую logstash для приема сообщений xml через плагин фильтра xml.Рассмотрим следующий пример xml:

<fruit.producer1:Apple>
    ...
</fruit.producer1:Apple>
<fruit.producer2:Apple>
    ...
</fruit.producer2:Apple>

Моя конфигурация фильтра выглядит следующим образом:

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

Результат после фильтра, который отправляется наasticsearch:

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

Как видите, я не могу отличить Apple от producer1 или producer2.Я играл с параметром remove_namespaces в конфигурации фильтра, но, похоже, ничего не работает.Как я могу гарантировать, что информация о префиксе сохраняется в выходных данных дляasticsearch?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Elasticsearch не любит . или : в именах полей.Решением было использование gsub для необработанного сообщения перед фильтром xml.

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": {
        ...
    },
    ...
}
0 голосов
/ 20 сентября 2018

В Elasticsearch 2.0 точки не допускались в именах полей.Возможно, именно поэтому XML-фильтр мог быть закодирован таким образом.Вы можете попытаться добавить другой фильтр, чтобы изменить точки на подчеркивание или что-то еще.Рубиновый фильтр должен помочь как доступно здесь - https://discuss.elastic.co/t/field-name-cannot-contain/33251/38

...