I am trying to connect the logstash jms input plugin to a Solace PubSub topic with no luck.
The resources I have used:
- Solace PubSub Docker in amazon linux: https://docs.solace.com/Solace-SW-Broker-Set-Up/Docker-Containers/Set-Up-Docker-Container-AMI-EC2.htm
- solace-pubsub-standard-8.10.0.1092-docker.tar.gz: http://dev.solace.com/downloads/
- jms-api: http://dev.solace.com/tech/jms-api/
To test the solace instance I used the java-api:
My configuration files for logstash:
logstash-jms.conf
input {
jms {
yaml_section => "solace"
include_header => true
include_properties => true
include_body => true
use_jms_timestamp => false
yaml_file => "/path/to/jms.yml"
destination => "tutorial/topic"
pub_sub => true
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "test_jms"
}
stdout {
codec => rubydebug
}
}
jms.yml
# Solace
solace:
:jndi_name: jms/defaultConnectionFactory
:factory: com.solacesystems.jndi.SolJNDIInitialContextFactory
:host_name: <IP>
:channel: LOGSTASH.CHL
:port: 55555
:transport_type: 1
:username: ****
:jndi_context:
java.naming.factory.initial: com.solacesystems.jndi.SolJNDIInitialContextFactory
java.naming.provider.url: smf://<IP>:55555
java.naming.security.principal: ****
java.naming.security.credentials: ****
:require_jars:
- /path/to/commons-lang-2.6.jar
- /path/to/commons-logging-1.1.3.jar
- /path/to/geronimo-jms_1.1_spec-1.1.1.jar
- /path/to/sol-common-10.3.0.jar
- /path/to/sol-jcsmp-10.3.0.jar
- /path/to/sol-jms-10.3.0.jar
The error message
$ ./bin/logstash -f logstash-jms.conf
Sending Logstash's logs to /path/to/logs which is now configured via log4j2.properties
[2018-05-30T15:35:23,418][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"netflow", :directory=>"/path/to/modules/netflow/configuration"}
[2018-05-30T15:35:23,442][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"fb_apache", :directory=>"/path/to/modules/fb_apache/configuration"}
[2018-05-30T15:35:23,671][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2018-05-30T15:35:24,228][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.2.3"}
[2018-05-30T15:35:24,681][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
[2018-05-30T15:35:28,247][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2018-05-30T15:35:28,715][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}}
[2018-05-30T15:35:28,727][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://localhost:9200/, :path=>"/"}
[2018-05-30T15:35:28,947][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>"http://localhost:9200/"}
[2018-05-30T15:35:29,035][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=>6}
[2018-05-30T15:35:29,040][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>6}
[2018-05-30T15:35:29,062][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=>nil}
[2018-05-30T15:35:29,103][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"template"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s"}, "mappings"=>{"_default_"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}}}
[2018-05-30T15:35:29,153][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["//localhost:9200"]}
[2018-05-30T15:35:29,470][INFO ][logstash.pipeline ] Pipeline started succesfully {:pipeline_id=>"main", :thread=>"#<Thread:0x68ede160 run>"}
[2018-05-30T15:35:29,571][INFO ][logstash.agent ] Pipelines running {:count=>1, :pipelines=>["main"]}
[2018-05-30T15:35:29,738][WARN ][logstash.inputs.jms ] JMS Consumer died {:exception=>#<NoMethodError: undefined method `create_connection' for #<Java::ComSolacesystemsJndi::SolJNDIInitialContextFactory:0x13a17dd3>>, :backtrace=>["/path/to/vendor/bundle/jruby/2.3.0/gems/jruby-jms-1.2.0-java/lib/jms/connection.rb:202:in `initialize'", "/path/to/vendor/bundle/jruby/2.3.0/gems/jruby-jms-1.2.0-java/lib/jms/connection.rb:50:in `start'", "/path/to/vendor/bundle/jruby/2.3.0/gems/jruby-jms-1.2.0-java/lib/jms/connection.rb:70:in `session'", "/path/to/vendor/bundle/jruby/2.3.0/gems/logstash-input-jms-3.0.5-java/lib/logstash/inputs/jms.rb:186:in `run_consumer'", "/path/to/vendor/bundle/jruby/2.3.0/gems/logstash-input-jms-3.0.5-java/lib/logstash/inputs/jms.rb:257:in `run'", "/path/to/logstash-core/lib/logstash/pipeline.rb:516:in `inputworker'", "/path/to/logstash-core/lib/logstash/pipeline.rb:509:in `block in start_input'"]}
The exception
undefined method `create_connection'
Thanks