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
ここから調査
修正前のソースだと、URLClassLoader経由で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しないと分からないかな・・・