ELK 5.X - долгий старт Logstash
Если брать logstash из коробки и ставить на CentOS запущенный как VM, то время его запуска может затянуться до 1-2 минут.
Интересно, что загрузка CPU/IO при этом нулевая.
Оказалось, что причиной тормозов является JRuby и /dev/random и одним из вариантов лечения может быть установка пакета haveged из EPEL (можно подключить repo и установить через yum, а можно просто скачать и установить соотв. RPM).
Немного теории (ссылка):
В Linux есть два общих устройства: /dev/random и /dev/urandom. Случайность создаётся инструментом /dev/random (он предназначен для блокирования) и ожидает соответствующего уровня энтропии для своего вывода. Если энтропия находится на достаточном уровне, /dev/urandom произведёт такой же уровень случайности; однако /dev/urandom продолжит генерировать случайные данные (поскольку является неблокирующим устройством) даже если пул энтропии иссякает. Это может привести к снижению качества случайностей и увеличивает шансы повтора предыдущих данных. Снижение уровня энтропии очень опасно для производственного сервера, особенно если этот сервер выполняет криптографические функции.
Вот она, причина задержек на старте Logstash - мы ждем качественных случайных данных.
Но тут на помощь приходит инструмент haveged. Основанный на алгоритме HAVEGE (а ранее – на его библиотеке), haveged позволяет генерировать случайные данные, руководствуясь изменениями во времени выполнения кода на процессоре. Так как обработать один и тот же блок кода в течение точно такого же времени почти невозможно (даже в той же среде на том же оборудовании), сроки выполнения одной или нескольких программ отлично подходят для генерации случайных данных. Инструмент haveged создаёт источник случайных данных с учетом различий в счётчика времени процессора (TSC) после неоднократного выполнения цикла.
Установка через yum после подключения EPEL:
# yum install haveged
или через RPM:
# rpm -ivh haveged-1.9.13-1.el7.x86_64.rpm
Добавление в автостарт и запуск:
CentOS 7:
# systemctl enable haveged
# systemctl start haveged
CentOS 5/6:
# chkconfig haveged on
# service haveged start
После этих действий Logstash запускается моментально.
Впервые опубликовано в ЖЖ.