Оптимизация перевода словаря в logstash

Я использую logstash для анализа данных из файла csv и отправки их в elasticsearch. У меня есть словарь с 600 тысячами строк, который использует одно из полей в качестве ключа для сопоставления его со строкой значений. В настоящее время я использую подобный плагин перевода, чтобы добиться того, что мне нужно

filter {
        translate {
            dictionary_path => "somepath"
            field => "myfield"
            override => false
            destination => "destinationField"
        }
    }

Я получаю строку, разделенную запятыми, в моем поле назначения, которое я читаю, используя

filter{
    csv {
        source => "destinationField"
        columns => ["col1","col2","col3"]            
        separator => ","
      }

}

В результате добавления этих двух блоков время обработки увеличилось в 3 раза. Если раньше обработка и отправка всех моих данных занимала 1 минуту, то теперь для выполнения задачи требуется 3 минуты.

Это ожидаемое поведение (это большой словарь)? Или есть ли способ дальнейшей оптимизации этого кода?


person Vignesh    schedule 09.02.2017    source источник
comment
Что ж, если вы включите дополнительные этапы обработки в свой пайплайн, вы можете только ожидать, что время обработки увеличится, верно?   -  person Val    schedule 09.02.2017
comment
Истинный! но тогда время обработки увеличивается в 3 раза, кажется, это много. Было любопытно узнать, есть ли более оптимизированный способ сделать это   -  person Vignesh    schedule 09.02.2017
comment
С помощью одной строки вы можете увеличить ее в 10 раз. В конце концов, все зависит от того, как реализованы эти фильтры. Меня не слишком беспокоит csv, но вы можете исследовать translate.   -  person Val    schedule 09.02.2017
comment
Спасибо за помощь! Я изучаю реализацию плагина, чтобы понять, смогу ли я лучше ее понять. Любые предложения о том, как еще я мог бы реализовать это?   -  person Vignesh    schedule 09.02.2017
comment
translate{} должен быть поиском по хэшу, что должно иметь минимальные накладные расходы. Вы можете точно определить, какая часть замедления связана с каждым фильтром, закомментировав csv{} и снова запустив тест.   -  person Alain Collins    schedule 09.02.2017
comment
если вы используете Logstash 5.2, теперь вы также можете использовать пользовательский интерфейс мониторинга. чтобы лучше понять, где тратится время.   -  person Val    schedule 09.02.2017
comment
@AlainCollins Я пробовал это. не фильтр csv вызывает накладные расходы, а перевод. и, как вы сказали, это просто поиск хеша. Я не могу понять, почему это вызывает накладные расходы в первую очередь.   -  person Vignesh    schedule 09.02.2017
comment
Вы предоставили logstash достаточно памяти, чтобы покрыть увеличение словаря?   -  person Alain Collins    schedule 09.02.2017


Ответы (1)


Фильтр csv может быть дорогим. Я написал плагин logstash-filter-augment, который работает почти так же, как translate, но обрабатывает собственный документ CSV лучше. Вы можете использовать настоящий CSV, а не фильтр csv для анализа поля.

person Alcanzar    schedule 09.02.2017
comment
Спасибо! Я попробую это. Использование этого кажется намного чище, чем использование двух блоков фильтров. - person Vignesh; 09.02.2017