Logstash7.4.2 JDBC経由でOracleからデータが取れない

Logstash6.8.6 から7.4.2にバージョンアップしたら、Oracleからデータが取れなくなった

logstash-stderr.logを確認しているとこんなのが出ていた

LogStash::PluginLoadingError
Unable to find driver class via URLClassLoader in given driver jars: Java::oracle.jdbc.driver.OracleDriver and Java::oracle.jdbc.driver.OracleDriver

調べてみると、7.4.1~7.5.0までこの現象が起き、7.5.1で修正された

Oracle: Unable to find driver class via URLClassLoader #355

実際7.4.0に下記のように、downgradeして動作確認したらエラーは解消された

$ yum --showduplicates search logstash
$ yum downgrade logstash-XXX.XX

修正自体は、Fix driver class loading #356で行われた(## 4.3.18)

Oracleだけでなく他のDBでもダメらしい 

Logstash jdbc input plugin pagination not working on version 7.4.2

Logstash 7.4.1 + JDBC + MS SQL Server + OpenJDK 11 = Fail to load #11268

ここから調査

修正前のソースだと、URL​​ClassLoader経由でOracleのjdbcドライバーが見つからなかったから落ちてるのかな.... Fix driver class loading #356 file change

    begin		
        klass = java.lang.Class.forName(@jdbc_driver_class.to_java(:string), true, ucl);		
      rescue Java::JavaLang::ClassNotFoundException => e		
        raise LogStash::Error, "Unable to find driver class via URLClassLoader in given driver jars: #{@jdbc_driver_class}"		
    end

Jdk11 class loading v4.3.14 の修正が原因らしいです

「java.lang.Class.forName」LinkageError ExceptionInInitializerError  ClassNotFoundExceptionのどれかが発生したのかな 

 klass = java.lang.Class.forName(@jdbc_driver_class.to_java(:string), true, ucl);

Javaのクラスやメソッドを前は使ってたが、CallingJavaFromJRuby#from-jar-filesのrequire methodを使ってる

うーん🧐 これ以上はDebugしないと分からないかな・・・

この記事が気に入ったらサポートをしてみませんか?