Подтвердить что ты не робот

Logstash закрывает дескрипторы файлов?

ПРЕДПОСЫЛКА:

У нас есть rsyslog создание каталогов файлов журналов, таких как: /var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME Таким образом, несколько серверов разливают свои журналы разных дат в центральное место.

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

file{
   path => /var/log/rsyslog/**/*.log
}

ВЫПУСК:

Теперь, когда количество файлов журнала в каталоге увеличивается, logstash открывает файловые дескрипторы (FD) для новых файлов и не будет выпускать FD для уже прочитанных файлов журналов. Поскольку файлы журнала сгенерированы за дату, после того, как они будут прочитаны, после этого это бесполезно, поскольку после этой даты оно не будет обновляться.

Я увеличил ограничение на открытие файлов до 65K в /etc/security/limits.conf

Можем ли мы заставить logstash закрыть дескриптор через некоторое время, чтобы количество открытых дескрипторов файлов не увеличилось слишком много?

4b9b3361

Ответ 1

Я думаю, вы, возможно, попали в эту ошибку: http://github.com/elastic/logstash/issues/1604. У вас такие же симптомы? Исключения из журналов через некоторое время? Если вы запустите sudo lsof | grep java | wc -l, вы видите, что дескрипторы неуклонно растут с течением времени? (некоторые из них могут закрыться, но некоторые останутся открытыми, и их число увеличится)

Ответ 2

Я некоторое время отслеживал эту проблему, и я не знаю, что она правильно решена.

Мы были в подобной лодке, возможно, больше: Logstash не смог открыть дескрипторы для сотен тысяч файлов журналов на коробке, хотя очень немногие из них были написаны активно. LOGSTASH-271 зафиксировал эту проблему, и были попытки исправления Logstash, включая PR # 1260.

Кажется, что исправление могло пробиться в Logstash 1.5 с PR # 1545, но я никогда не тестировал это лично. Мы закончили разворачивание базовой библиотеки, которую Logstash использует для реализации ввода файла, называемого FileWatch, в FFileWatch, который добавляет "механизм выселения" .

Основная идея этого подхода - хранить файлы только во время их написания. Обычно Logstash откроет дескриптор файла и сохранит его навсегда, но FFileWatch добавляет возможность закрыть дескриптор, если файл не изменился недавно (eviction_interval). Затем я создал пользовательскую сборку Logstash с использованием разветвленной драгоценности.

Очевидно, это меньше идеала, но это сработало для нас. В конце концов мы полностью отбросили Logstash для сбора файлов журналов, хотя мы все еще используем его дальше по конвейеру обработки журнала. Мы внедрили собственный легкий грузоотправитель лога (Franz), который не страдает от этой проблемы.