Как обойти «Обнаруженную неоднозначную ссылку на поле» при анализе параметров HTTP-URL с помощью Logstash - PullRequest
0 голосов
/ 17 мая 2019

Итак, я использую Logstash для анализа журналов доступа Apache.В настоящее время я использую некоторые фильтры kv, чтобы справиться с этим с помощью Logstash 6.7.x (и более ранних версий), но хотел обновить его до Logstash 7.x.

Это похоже на предупреждение IЯ видел в Logstash 6.7.x, что теперь приводит к явной ошибке с «Исключением», которое делает kv мои фильтры бесполезными.

Предупреждение, которое я получаю в Logstash 6.7.0, таково:

2019-05-13T10:57:09,541][WARN ][org.logstash.FieldReference] Detected ambiguous Field Reference `fee[]`, which we expanded to the path `[fee]`; in a future release of Logstash, ambiguous Field References will not be expanded.

Фильтры kv выглядят так:

kv {
  source => "request"
  field_split => "&?"
  allow_duplicate_values => false
  include_keys => [ "fee", "fie", "foe", "fum" ]
  include_keys => [ "fee[]", "fie[]", "foe[]", "fum[]" ]
  prefix => "abc_"
}

Да, похоже, что include_keys немного избыточны, но если вы знаете о параметрах GETв URL, в том числе такие вещи, как fee и fee[] позволяют мне захватывать значения, которые передаются в виде массива, а также строки.И это работает отлично!До сих пор.

В Logstash 7.x вместо предупреждения я получаю следующее:

Exception while parsing KV {:exception=>"Invalid FieldReference: `fee[]`"}

Ну, это воняет.Это в основном означает, что мой ключ fee[] include не работает.И теперь мой анализ данных отключен, поскольку мне нужно учитывать значения, которые отправляются как fee, а также fee[] в этом процессе.

Считывание этого предупреждения из Logstash 6.7.x, по-видимому, четко говорит о том, чтоfee[] будет интерпретироваться как [fee], но это совершенно не то, что мне нужно, поскольку параметры GET URL на самом деле не присваивают значения массива fee[0], fee[1] и fee[2] и т. Д .;значения довольно произвольны для элементов, основанных на пользовательском вводе.

Так что я могу сделать, чтобы эффективно обойти эту проблему?

1 Ответ

2 голосов
/ 17 мая 2019

Хорошо, я прочитал об этой проблеме на этой ветке обсуждения на официальном сайте Elasticsearch. Это привело меня к этой справочной документации , которая помогает ... Но подтверждает только то, что я сказал, когда сказал, что fee[] будет интерпретироваться как [fee], что не будет работать для меня.

Поэтому я просмотрел свой код, а также опции поля kv и понял, что - для моих целей - я все делал неправильно: вместо двух строк include_keys - что является избыточным и явно не идеальным - я должен использовать remove_char_key, чтобы избавиться от квадратных скобок, например:

remove_char_key => "\[\]"

И встроенный в мои kv фильтры, это будет выглядеть так:

kv {
  source => "request"
  field_split => "&?"
  allow_duplicate_values => false
  remove_char_key => "\[\]"
  include_keys => [ "fee", "fie", "foe", "fum" ]
  prefix => "abc_"
}

Базовое тестирование между этими настроенными kv фильтрами и тем, что было у меня до этого, показывает 100% те же самые желаемые результаты и результаты. Так что все хорошо, чтобы пойти! И с этим на месте я могу безопасно обновить до Logstash 7.x.

...