2016-09-04 1 views
7

Logstash разрешает executing arbitrary commands в качестве входов для конвейера. Вот мой пример трубопровода:выполнить ruby ​​в качестве входного потока для логстаста

input { 
    exec { 
    command => '/usr/bin/ruby -e "puts RUBY_VERSION"' 
    interval => 10 
    } 
} 

output { 
    stdout { codec => rubydebug } 
} 

С этим я получаю следующее сообщение об ошибке:

/opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:328:in `block in verify_gemfile_dependencies_are_found!': Could not find gem 'logstash-core (= 2.4.0) ruby' in any of the gem sources listed in your Gemfile or installed on this machine. (Bundler::GemNotFound) 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:307:in `each' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:307:in `verify_gemfile_dependencies_are_found!' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:199:in `start' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:182:in `resolve' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:192:in `resolve' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:132:in `specs' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:177:in `specs_for' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:166:in `requested_specs' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/environment.rb:18:in `requested_specs' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/runtime.rb:13:in `setup' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler.rb:122:in `setup' 
     from /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/setup.rb:18:in `<top (required)>' 
     from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 

Я также попытался запустить собственный JRuby logstash внутри ехес как этот

input { 
    exec { 
    command => '/opt/logstash/vendor/jruby/bin/jruby -e "puts RUBY_VERSION"' 
    interval => 10 
    } 
} 

output { 
    stdout { codec => rubydebug } 
} 

и он создает другую ошибку Bundler:

Bundler::GemNotFound: Could not find gem 'ci_reporter_rspec (= 1.0.0) java' in any of the gem sources listed in your Gemfile or installed on this machine. 
    verify_gemfile_dependencies_are_found! at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:328 
            each at org/jruby/RubyArray.java:1613 
    verify_gemfile_dependencies_are_found! at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:307 
            start at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:199 
           resolve at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:182 
           resolve at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:192 
            specs at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:132 
           specs_for at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:177 
         requested_specs at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/definition.rb:166 
         requested_specs at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/environment.rb:18 
            setup at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/runtime.rb:13 
            setup at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler.rb:122 
            (root) at /opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/setup.rb:18 
           require at org/jruby/RubyKernel.java:1040 
            (root) at /opt/logstash/vendor/jruby/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1 

Logstash продолжает работать, и трубопровод выполняется каждые 10 секунд, но сообщение всегда пуст. Попытка выполнить другие команды, такие как echo "hello", работает без проблем.

Запуск на logstash 2.4.0, версия openjdk «1.8.0_102», рубин системы - это МРТ 2.3.1 на Archlinux ARM.

Любые идеи?

+0

Вы пытались запустить 'bundle install'? –

+0

yes, logstash установлен правильно, он работает, когда я не пытаюсь запускать команды ruby. – ben

+0

У вас есть исполняемый файл 'bundle' в каталоге'/opt/logstash/vendor/jruby/bin'? Я предпочел бы использовать собственную установку jruby вместо упакованной logstash, если вы собираетесь использовать некоторые библиотеки ruby. –

ответ

2

Похоже, вам, возможно, потребуется переключиться на JRuby вместо MRI, что является экспериментальным для Logstash, а не currently supported. Вы можете рассмотреть RVM или rbenv, которые могут помочь в управлении различными версиями Ruby и переключаться между JRuby и native по мере необходимости в оболочке.

Как только вы используете JRuby + bundler (gem install bundler), вы можете bundle install из корня проекта, и ваши проблемы с зависимостями должны быть разрешены.

+0

Я пробовал это, и он ddidnt работает. Я установил зависимости моего скрипта в jruby env logstash и запустил мой скрипт с тем же самым jruby, и он все еще не работал. См. Обновленный вопрос с примером jruby – ben

+0

Опять же, это не о logstash или моей команде, потому что я не использую никаких библиотек (см. Пример в вопросе). Также logstash работает отлично для всех других трубопроводов. – ben

+0

Похоже на хороший прогресс. Вы можете увидеть эту проблему с логсташем для того же сообщения об ошибке. Есть ли в Gemfile.lock драгоценные камни в нем?отредактировано: удаленные инструкции перестройки – nrako