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

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


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

в основном, я получил the 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)

пожалуйста, может кто-нибудь сказать мне, что я упускаю ?

4 ответов


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

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


Я начал использовать logstash около недели назад. Был действительно соблазнен @ jordansissel hate-driven-Development talks. Провел последние дни на #logstash irc, разговаривая с ppl по вопросам, включая тот, который вы упомянули.

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

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

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

короткий ответ: java хорош в чашке, а не в компьютере. Если вы видите что - то вроде "предварительное условие: Java" - приготовьтесь к отходам.


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


поскольку этот вопрос по-прежнему актуален, я хотел бы отметить, что если вы работаете на Java

даже если сказать, чтобы получить его случайные числа из /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 wiki есть документ о других улучшениях производительности запуска (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 секунд вокруг сладкого пятна для глотка кофе, поэтому избегает неудобной середины вашего теста, Прежде чем ваш глоток будет завершен. B^)

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

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" вместо vendored jruby-вы не сделали бы этого для запуска logstash обычно, но это может быть полезно для -- configtest, если вы хотите использовать его часто. -- вы вам нужно убедиться, что у вас есть все различные модули Ruby, а затем у вас будет перекос версии между вашим родным ruby и продаваемым jruby... Но, возможно, рубиновый бафф мог бы принять эту идею и убежать с ней.