Json codec crashing logstash


#1

I have courier input feeding the pipeline. When i try using the tcp output using codec => json or codec => json_lines, logstash crashes and spits this error --

LogStash::Json::GeneratorError: Failed to load class 'org.jruby.RubyObject$Access4JacksonDeserializerc66a1575': com.fasterxml.jackson.module.afterburner.ser.BeanPropertyAccessor
     jruby_dump at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/json.rb:53
        to_json at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/event.rb:158
         encode at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-codec-json-2.0.2/lib/logstash/codecs/json.rb:68
        receive at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-tcp-2.0.2/lib/logstash/outputs/tcp.rb:143
         handle at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/outputs/base.rb:80
    output_func at (eval):60
   outputworker at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/pipeline.rb:252
  start_outputs at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/pipeline.rb:169

Here is my config --

input {
	stdin {}
	courier{
		port => 4546
		transport => "tls"
		ssl_certificate => "path/to/cert.crt"
		ssl_key => "path/to/cert.key"
	}
}

filter {    }

output {
	stdout { codec => rubydebug }

	tcp {
		mode => "client"
		host => "172.31.6.186"
		port => 4545
		codec => json
	}
}

Strange hanging/buffering behavior with tcp plugin
(Joe Lawson) #2

Try codec => json {}


#3

thanks for the suggestion -- still have the same error

LogStash::Json::GeneratorError: Failed to load class 'org.jruby.RubyObject$Access4JacksonDeserializerc66a1575': com.fasterxml.jackson.module.afterburner.ser.BeanPropertyAccessor
     jruby_dump at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/json.rb:53
        to_json at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/event.rb:158
         encode at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-codec-json-2.0.2/lib/logstash/codecs/json.rb:68
        receive at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-tcp-2.0.2/lib/logstash/outputs/tcp.rb:143
         handle at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/outputs/base.rb:80
    output_func at (eval):37
   outputworker at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/pipeline.rb:252
  start_outputs at /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.0.0-java/lib/logstash/pipeline.rb:169

So it must have something to do with the courier input I am using, because if I just use the stdin input and take out the courier input, it works fine. So the structure of the event coming from courier seems to be an issue.. any ideas? Do I need to run it through some filter to then pass it to tcp => codec => json {} ? I actually need to use json_lines codec, but I'm getting the same behavior for both of them.


(Mikhail) #4

Try this:
codec => "json"
or
codec => "json_lines"


(system) #5