Почему logstash так долго запускается/загружается?

Изменить : я изменил заголовок, потому что проблема была не в том, о чем я думал изначально. Дело в том, что logstash запускается больше минуты, что может быть неверно истолковано как "тишина"...


Я пытаюсь запустить logstash, поэтому я следовал инструкциям на официальном сайте для автономной установки: http://logstash.net/docs/1.1.4/tutorials/getting-started-простой

По сути, я получил файл logstash-1.1.4-monolithic.jar, а затем создал очень простой файл конфигурации: (example.conf)

input {
  stdin { type => "stdin-type"  }
}
output {
  stdout { debug_format => "json" }
}

Но когда я запускаю logstash, ничего не выходит (я набираю случайный текст в STDIN, но не получаю ответа):

# java -jar logstash-1.1.4-monolithic.jar agent -f example.conf
Test
toto
hey ??? Wakeup !!!
^C

(Для информации: версия Java верна)

# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

Пожалуйста, может кто-нибудь сказать мне, что мне не хватает?


person Orabîg    schedule 07.11.2012    source источник
comment
Лучший способ получить помощь по logstash — использовать список рассылки или IRC-канал, поскольку именно там проживает активное сообщество и опытные пользователи.   -  person    schedule 14.01.2013


Ответы (4)


Хорошо, я нашел сам.

Все работало нормально. Просто logstash оооочень долго запускается. Более 60 секунд на моем (скромном) сервере!! Добавьте к этому огромному времени запуска тот факт, что при запуске ничего не печатается...

person Orabîg    schedule 07.11.2012

Я начал использовать logstash около недели назад. Был действительно соблазнен разговорами @jordansisssel о развитии, движимом ненавистью. Провел последние дни на #logstash irc, разговаривая с людьми о проблемах, включая ту, которую вы упомянули.

Запуск logstash-web (разреженный веб-сервер Sinatra) занимает 29 (!) секунд на моей Ubuntu 12.04.

Я считаю, что logstash должен отказаться от использования java. Logstash, безусловно, может работать как рубиновое приложение, такое как sensu, и обеспечивать ту же ценность с меньшими (или без) трудностями.

С java(jruby) puts "bla" на консоли занимает 7 секунд.

Короткий ответ: Java хороша в чашке, а не в компьютере. Если вы видите что-то вроде «Необходимое условие: Java» — готовьтесь к растрате.

person joystick    schedule 10.04.2014

Я думаю, вы поспешите с выводами, просто активируйте журналы --debug и посмотрите, что происходит + вы даже можете использовать свой комплект для его профилирования и точно увидеть, что происходит.

person Ran Davidovitz    schedule 11.09.2014

Поскольку этот вопрос все еще актуален, я хотел бы отметить, что если вы работаете на Java ‹ 8, то одна из причин, по которой вы можете получить очень медленное время запуска в Linux (и, возможно, в Solaris), заключается в том, что Oracle JVM на этих У платформ есть ошибка, связанная с тем, где они получают свои случайные числа.

Даже если ему будет предложено получить случайные числа из /dev/urandom, он этого не сделает (по крайней мере, не совсем?). Если вы заставите его читать из /dev/./urandom, что то же самое, но не соответствует внутренней нарушенной логике, то вы вполне можете обнаружить, что Java запускается намного быстрее (особенно в средах промежуточного программного обеспечения J2EE).

http://bugs.java.com/view_bug.do?bug_id=6521844

Тем не менее, даже с Java 8 logstash --configtest по-прежнему очень медленно запускается; это, вероятно, связано с тем, что 64-битная JVM в режиме сервера будет выполнять большую работу по оптимизации при запуске (даже тогда, я подозреваю, что JRuby делает много вещей, связанных с Ruby).

В вики JRuby есть документ о других улучшениях производительности запуска (https://github.com/jruby/jruby/wiki/Improving-startup-time), но не очень подходит для более быстрого получения logstash. Я мог бы сократить время запуска logstash --configtest примерно до 8 секунд с помощью этого:

[root@node-2 ~]# DEBUG=1 /opt/logstash/bin/logstash help
DEBUG: exec /opt/logstash/vendor/jruby/bin/jruby --1.9 -J-XX:+UseParNewGC -J-XX:+UseConcMarkSweepGC -J-Djava.awt.headless=true -J-XX:CMSInitiatingOccupancyFraction=75 -J-XX:+UseCMSInitiatingOccupancyOnly -J-XX:+HeapDumpOnOutOfMemoryError -J-Xmx1g -J-XX:HeapDumpPath=/opt/logstash/heapdump.hprof /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb help

Возьмите команду, которую она будет выполнять, удалите все параметры Java и замените на --dev

[root@node-2 ~]# time /opt/logstash/vendor/jruby/bin/jruby /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest --config /etc/logstash/logstash-submission.conf 
Configuration OK

real    0m13.367s
user    0m12.966s
sys 0m0.321s
[root@node-2 ~]# time /opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest --config /etc/logstash/logstash-submission.conf 
Configuration OK

real    0m6.954s
user    0m6.629s
sys 0m0.286s

7 секунд все еще не очень хорошо, но это лучше, чем 14 или около того. 7 секунд — это самое приятное время для глотка кофе, поэтому вы избегаете неловкой середины вашего теста, заканчивающегося до того, как ваш глоток будет завершен. Б^)

Простой псевдоним может быть полезной быстрой победой:

alias logstash-configtest="/opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest"

Я считаю, что вы также можете запустить logstash с флагом USE_RUBY=1, чтобы использовать «ruby» вместо jruby от поставщика — вы бы не сделали этого для обычного запуска logstash, но это может быть полезно для --configtest, если вы хотите используйте его часто. - вам действительно нужно убедиться, что у вас есть все различные модули Ruby, и тогда у вас будет перекос версий между вашим родным ruby ​​​​и jruby от поставщика ... Но, возможно, любитель Ruby может взять эту идею и использовать ее.

person Cameron Kerr    schedule 22.09.2016