2016-09-04 31 views
7

Logstash pozwala executing arbitrary commands jako dane wejściowe dla potoku. Oto mój przykład rurociąg:Wykonaj ruby ​​jako dane wejściowe potoku do logstash

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

output { 
    stdout { codec => rubydebug } 
} 

Dzięki temu pojawia się następujący błąd:

/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' 

Próbowałem też działa logstash za własny JRuby wewnątrz Exec jak ten

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

output { 
    stdout { codec => rubydebug } 
} 

i tworzy kolejny błąd programu 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 działa, a potok jest uruchamiany co 10 sekund, ale komunikat jest zawsze pusty. Próba wykonania innych poleceń, takich jak echo "hello", działa bezproblemowo.

Działa na logstash 2.4.0, wersja openjdk "1.8.0_102", rubin systemowy to MRI 2.3.1 na Archlinux ARM.

Wszelkie pomysły?

+0

Czy próbowałeś uruchomić 'bundle install'? –

+0

yes, logstash jest poprawnie zainstalowany, działa, gdy nie próbuję uruchamiać komend ruby ​​ – ben

+0

Czy masz plik wykonywalny 'bundle' w katalogu'/opt/logstash/vendor/jruby/bin'? Wolałbym raczej użyć własnej instalacji, zamiast pakietu logstash, jeśli zamierzasz używać bibliotek ruby. –

Odpowiedz

2

Wygląda na to, że może zajść potrzeba przełączenia na JRuby zamiast MRI, co jest eksperymentalne dla Logstash, a nie dla currently supported. Możesz wziąć pod uwagę RVM lub rbenv, które mogą pomóc w zarządzaniu różnymi wersjami Ruby i przełączać się między JRuby i natywnym w razie potrzeby w powłoce.

Gdy używasz JRuby + bundler (gem install bundler), możesz bundle install z katalogu głównego projektu, a problemy z zależnościami powinny zostać rozwiązane.

+0

Próbowałem tego i to ddidnt wyszło. Zainstalowałem zależności mojego skryptu w środowisku loggingowym logstash i uruchomiłem skrypt z tym samym cyklem i nadal nie działało. Zobacz zaktualizowane pytanie z przykrym przykładem: – ben

+0

Znowu nie chodzi o logstash ani moje polecenie, ponieważ nie używam żadnych bibliotek (zobacz przykład w pytaniu). Również logstash działa dobrze dla wszystkich innych potoków. – ben

+0

Wygląda na dobry postęp. Ten komunikat o błędzie można wyświetlić dla tego samego komunikatu o błędzie. Czy Gemfile.lock ma na liście wymienione klejnoty?edytowane: usunięte instrukcje odbudowy – nrako