簡體   English   中英

logstash錯誤:com.mariadb.jdbc.Driver未加載

[英]logstash Error: com.mariadb.jdbc.Driver not loaded

我正在嘗試使用LogStash將一些表從MariaDB同步到ElasticSearch。

我在Debian Buster(10)服務器上

$ java -version
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Debian-1deb10u1, mixed mode, sharing)

$ mariadb --version
mariadb  Ver 15.1 Distrib 10.3.15-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

$ /usr/share/logstash/bin/logstash --version
logstash 7.2.0

我嘗試了不同的連接器:

$ ls -l /usr/share/java/
mariadb-java-client.jar

$ ls -l /etc/logstash/connectors/
mariadb-java-client-2.1.2.jar
mariadb-java-client-2.2.6.jar
mariadb-java-client-2.3.0.jar
mariadb-java-client-2.4.2.jar
mysql-connector-java-8.0.17.jar

對於mariadb連接器,使用“ org.mariadb.jdbc.Driver”,對於mysql連接器,使用“ com.mysql.cj.jdbc.Driver”

$ cat /etc/logstash/conf.d/db-fr-bank.conf
input {
  jdbc {
  jdbc_connection_string => "jdbc:mariadb://localhost:3306/db_fr"
  jdbc_user => "logstash"
  jdbc_password => "<password>"
  jdbc_driver_library => "/usr/share/java/mariadb-java-client.jar"
  jdbc_driver_class => "org.mariadb.jdbc.Driver"
    statement => "SELECT * FROM bank"
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "fr-bank"
  }
}

但是,我沒有同步,而是不斷得到:

$ /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/db-fr-bank.conf 
...
[ERROR] 2019-07-29 02:08:17.563 [[main]<jdbc] jdbc - Failed to load /usr/share/java/mariadb-java-client.jar {:exception=>#<TypeError: failed to coerce jdk.internal.loader.ClassLoaders$AppClassLoader to java.net.URLClassLoader>}
[ERROR] 2019-07-29 02:08:17.598 [[main]<jdbc] javapipeline - A plugin had an unrecoverable error. Will restart this plugin.
  Pipeline_id:main
  Plugin: <LogStash::Inputs::Jdbc jdbc_user=>"logstash", jdbc_password=><password>, statement=>"SELECT * FROM bank", jdbc_driver_library=>"/usr/share/java/mariadb-java-client.jar", jdbc_connection_string=>"jdbc:mariadb://localhost:3306/db_fr", id=>"38a6d112755a5e87278761cf5f41b7e509212d1d02837a03672df2face00943a", jdbc_driver_class=>"org.mariadb.jdbc.Driver", enable_metric=>true, codec=><LogStash::Codecs::Plain id=>"plain_f3094292-7482-4b73-95c4-7f78da4da911", 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=>"/root/.logstash_jdbc_last_run", use_column_value=>false, tracking_column_type=>"numeric", clean_run=>false, record_last_run=>true, lowercase_column_names=>true>
  Error: 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'
...

同樣的問題在這里。

我用的解決辦法從這里這個和它的作品。

即:

將驅動程序文件復制到{logstash install dir} / logstash-core / lib / jars /目錄。 當通過Java啟動logstash時,會將這些jar添加到正確的JDK類路徑中。

將logstash conf中的jdbc_driver_library值更改為"" 即: jdbc_driver_library => ""也是如此,否則代碼仍然嘗試單獨加載jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM