简体   繁体   中英

Can not load jdbc driver Logstash with MariaDB

I want to import data from mariaDB to elasticsearch using logstash Logstash config file:

input {
  jdbc {
    jdbc_driver_library => "/<file path>/mariadb-java-client-2.4.2.jar"
    jdbc_driver_class => "java::org.mariadb.jdbc.Driver"
    jdbc_connection_string => "jdbc:mariadb://<database host>:3306/<database name>"
    jdbc_user => "root"
    jdbc_password => "password"
    statement => "SELECT city_id as id, city_name as cityName FROM city_view;"
  }
}
output {
  elasticsearch {
    document_id=> "%{id}"
    document_type => "cities"
    index => "city"
    hosts => "localhost:9200"
  }
  stdout{
  codec => rubydebug
  }
}

Logstash version: logstash 7.3.1

Java version: java 11.0.2 2019-01-15 LTS When I run logstash with above config file(ie. logstash -f test.conf), I am getting below error

[ERROR] 2019-08-29 10:36:14.414 [[main]<jdbc] jdbc - Failed to load /home/nitin/Downloads/jar_files/mariadb-java-client-2.4.2.jar {:exception=>#<TypeError: failed to coerce jdk.internal.loader.ClassLoaders$AppClassLoader to java.net.URLClassLoader>}
[ERROR] 2019-08-29 10:36:14.435 [[main]<jdbc] javapipeline - A plugin had an unrecoverable error. Will restart this plugin.
  Pipeline_id:main
  Plugin: <LogStash::Inputs::Jdbc jdbc_user=>"ci_dev", jdbc_password=><password>, statement=>"SELECT city_id as id, city_name as cityName FROM city_view;", jdbc_driver_library=>"/home/nitin/Downloads/jar_files/mariadb-java-client-2.4.2.jar", jdbc_connection_string=>"jdbc:mariadb://databasehost:3306/database", id=>"a54ea500b9cada81163159511b3a081f1f0ef724b956e5bd2d7a66ec54dced74", jdbc_driver_class=>"java::org.mariadb.jdbc.Driver", enable_metric=>true, codec=><LogStash::Codecs::Plain id=>"plain_440926ba-65ee-47cf-964f-2328293a2085", enable_metric=>true, charset=>"UTF-8">, jdbc_paging_enabled=>false, jdbc_page_size=>100000, jdbc_validate_connection=>false, jdbc_validation_timeout=>3600, jdbc_pool_timeout=>5, sql_log_level=>"info", connection_retry_attempts=>1, connection_retry_attempts_wait_time=>0.5, parameters=>{"sql_last_value"=>1970-01-01 00:00:00 UTC}, last_run_metadata_path=>"/home/nitin/.logstash_jdbc_last_run", use_column_value=>false, tracking_column_type=>"numeric", clean_run=>false, record_last_run=>true, lowercase_column_names=>true>
  Error: java::org.mariadb.jdbc.Driver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?
  Exception: LogStash::ConfigurationError
  Stack: /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.13/lib/logstash/plugin_mixins/jdbc/jdbc.rb:163:in `open_jdbc_connection'
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.13/lib/logstash/plugin_mixins/jdbc/jdbc.rb:221:in `execute_statement'
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.13/lib/logstash/inputs/jdbc.rb:277:in `execute_query'
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.13/lib/logstash/inputs/jdbc.rb:263:in `run'
/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:309:in `inputworker'
/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:302:in `block in start_input'

I got similar error while setting up Postgres DB with Logstash

The recommended workaround is to:

  1. Copy jdbc library to <logstash install dir>/logstash-core/lib/jars/ directory
  2. Set the jdbc_driver_library to empty. jdbc_driver_library => ""

FWIW, above workaround worked for me on Java 11 version

  • Java version: 11.0.9.1
  • Logstash version: 7.2.0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM