Как уменьшить использование памяти Logstash

Я использую Logstash-5.6.5 (в Windows), работающий в автономной системе (без облака или кластера). Планирование просмотреть некоторые файлы журнала и опубликовать его для локального запуска asticsearch. Но когда проверено использование памяти Logstash, без конфигурации для просмотра какого-либо файла он показывает около 600 МБ памяти. Когда я добавляю конфигурации конвейера входного файла дальше, он добавляет память дополнительно (для просмотра 3 файлов журнала он добавил до 70 МБ, но я планирую добавить еще до 20 журналов).

1. Это ожидаемое поведение?
2. Есть ли способ уменьшить громадное использование памяти logstash?

1 ответ

Решение

После исследования в течение нескольких дней ниже мой ответ на мой вопрос.

Ниже приведены способы оптимизации памяти Logstash:

  1. Использование памяти Logstash в первую очередь накапливается размером кучи. Это можно эффективно контролировать, установив размер динамической памяти в переменной окружения LS_JAVA_OPTS, как показано ниже, перед запуском Logstash (для версии Windows в моем случае):

    set "LS_JAVA_OPTS=-Xms512m –Xmx512m"
    

В противном случае это может быть добавлено в setup.bat в начале файла.

Таким образом, я ограничил общее использование памяти Logstash до 620 МБ максимум.

  1. Конфигурации конвейера Logstash (вход / фильтр / выход) могут быть оптимизированы с использованием методов, упомянутых здесь.

Таким образом, я утверждал, оптимизированы ли мои конфигурации фильтра Logstash.

  1. Кроме того, конфигурации входного файла конвейера можно оптимизировать, используя несколько свойств ниже, чтобы игнорировать / закрывать старые файлы журнала, как описано здесь, что предотвратит ненужное создание потоков конвейера.

    • ignore_older - в секундах - чтобы полностью игнорировать любой файл старше указанной секунды
    • max_open_files - в цифрах - для оптимизации максимального количества открытых файлов
    • close_older - в считанные секунды закрыть старые файлы
    • exclude - массив нежелательных имен файлов (с подстановочным знаком или без него)

В моем случае мне нужно было смотреть только последние файлы и игнорировать старые файлы, и я соответственно настроил конфигурацию, как показано ниже:

input {
  file {
    #The application log path that will match with the rolling logs.
    path => "c:/path/to/log/app-1.0-*.log"
    #I didn't want logs older than an hour.
    #If that older file gets updated with a new entry 
    #that will become the new file and the new entry will be read by Logstash
    ignore_older => 3600 

    #I wanted to have only the very recent files to be watched. 
    #Since I am aware there won't be more then 5 files I set it to 5.
    max_open_files => 5 

    #If the log file is not updated for 5 minutes close it. 
    #If any new entry gets added then it will be opened again.
    close_older => 300 
  }
}
Другие вопросы по тегам