logstash-plugins / logstash-input-jdbc

Logstash Plugin for JDBC Inputs
Apache License 2.0
449 stars 187 forks source link

“Unable to find driver class” when use jdbc_driver_library => “/home/ubuntu/ojdbc6.jar” after upgrade to Logstash 6.8.4 #357

Closed JerseyGood closed 4 years ago

JerseyGood commented 5 years ago

The latest release of Logstash 6.8.4 with jdbc-input-plugin 4.3.16 give us following error in syslog

Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172   job:
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172     Rufus::Scheduler::CronJob "*/1 * * * *" {}
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172   error:
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172     2172
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172     LogStash::PluginLoadingError
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172     Unable to find driver class via URLClassLoader in given driver jars: Java::oracle.jdbc.driver.OracleDriver and Java::oracle.jdbc.driver.OracleDriver
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.16/lib/logstash/plugin_mixins/jdbc/jdbc.rb:181:in `open_jdbc_connection'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.16/lib/logstash/plugin_mixins/jdbc/jdbc.rb:253:in `execute_statement'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.16/lib/logstash/inputs/jdbc.rb:309:in `execute_query'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.16/lib/logstash/inputs/jdbc.rb:276:in `block in run'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:234:in `do_call'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:258:in `do_trigger'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:300:in `block in start_work_thread'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:299:in `block in start_work_thread'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       org/jruby/RubyKernel.java:1425:in `loop'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172       /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:289:in `block in start_work_thread'
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172   tz:
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172     ENV['TZ']:
Oct 24 21:02:00 ip-10-40-0-99 logstash[15520]:   2172     Time.now: 2019-10-24 21:02:00 +0900

our pipeline config looks like

        jdbc_driver_library => "/home/ubuntu/ojdbc6.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"

OS Info

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:    16.04
Codename:   xenial

JDK info

$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

It was fine when running Logstash 6.8.2 and 6.8.3 with jdbc-input-plugin 4.3.13. So I guess something wrong with the Driver loading modification for jdbc-input-plugin 4.3.14. and 4.3.15 release

A workaround for us is to not using jdbc_driver_library but place the ojdbc6.jar in logstash-core lib path

install -C -m 644 -o logstash -g logstash /home/ubuntu/ojdbc6.jar /usr/share/logstash/logstash-core/lib/jars
andsel commented 5 years ago

Hi @JerseyGood loading of drivers has changed recently, please could you try with 4.3.18 version and report here if the problem persists?

JerseyGood commented 5 years ago

@andsel Thanks for the reply, will give it a try with 4.3.18 of jdbc-input-plugin and share the result.

But we are installing Logstash through apt and the latest stable version logstash is 1:6.8.4-1 which I believe by default uses jdbc-input-plugin 4.3.16

https://www.elastic.co/guide/en/logstash/6.8/logstash-6-8-4.html

Do you know when will logstash bump up the version to use jdbc-input-plugin 4.3.18

jottorice commented 4 years ago

I've run into a very similar-looking problem with Logstash 7.4, installed on Ubuntu 18.0.4 with the "apt-get" instructions listed here: https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt-get update && sudo apt-get install logstash
$ /usr/share/logstash/bin/logstash --version
logstash 7.4.2

Trying to connect to a MySQL database with the JDBC connector mysql-connector-java-8.0.18.jar, Logstash just kept failing with plugin loading errors. But this error went away when I updated the logstash-input-jdbc plugin:

$ sudo /usr/share/logstash/bin/logstash-plugin update logstash-input-jdbc
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.headius.backport9.modules.Modules to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Updating logstash-input-jdbc
Updated logstash-input-jdbc 4.3.16 to 4.3.18

This is a very tricky problem to diagnose! 4.3.18 should be made the default plugin version ASAP, to avoid this bug, AFAICS.

lpkirby commented 4 years ago

I can confirm this is fixed with logstash 6.8.5

robbavey commented 4 years ago

This was fixed by #355 and is fixed by the latest release of the jdbc input.

Running bin/logstash-plugin update logstash-input-jdbc should get you to 4.3.19 (this fix landed in 4.3.18):

/tmp/logstash-7.5.0
❯ bin/logstash-plugin update logstash-input-jdbc
Updating logstash-input-jdbc
Updated logstash-input-jdbc 4.3.16 to 4.3.19

Version >=4.3.19 will be shipped in 7.5.1