Как уменьшить использование памяти Logstash
Я использую Logstash-5.6.5 (в Windows), работающий в автономной системе (без облака или кластера). Планирование просмотреть некоторые файлы журнала и опубликовать его для локального запуска asticsearch. Но когда проверено использование памяти Logstash, без конфигурации для просмотра какого-либо файла он показывает около 600 МБ памяти. Когда я добавляю конфигурации конвейера входного файла дальше, он добавляет память дополнительно (для просмотра 3 файлов журнала он добавил до 70 МБ, но я планирую добавить еще до 20 журналов).
1. Это ожидаемое поведение?
2. Есть ли способ уменьшить громадное использование памяти logstash?
1 ответ
После исследования в течение нескольких дней ниже мой ответ на мой вопрос.
Ниже приведены способы оптимизации памяти Logstash:
Использование памяти Logstash в первую очередь накапливается размером кучи. Это можно эффективно контролировать, установив размер динамической памяти в переменной окружения LS_JAVA_OPTS, как показано ниже, перед запуском Logstash (для версии Windows в моем случае):
set "LS_JAVA_OPTS=-Xms512m –Xmx512m"
В противном случае это может быть добавлено в setup.bat в начале файла.
Таким образом, я ограничил общее использование памяти Logstash до 620 МБ максимум.
- Конфигурации конвейера Logstash (вход / фильтр / выход) могут быть оптимизированы с использованием методов, упомянутых здесь.
Таким образом, я утверждал, оптимизированы ли мои конфигурации фильтра Logstash.
Кроме того, конфигурации входного файла конвейера можно оптимизировать, используя несколько свойств ниже, чтобы игнорировать / закрывать старые файлы журнала, как описано здесь, что предотвратит ненужное создание потоков конвейера.
- 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
}
}