【问题标题】:Logstash: Error org.postgres.Driver not loadedLogstash:错误 org.postgres.Driver 未加载
【发布时间】:2021-01-15 18:31:01
【问题描述】:

我需要从 PostgreSQL 数据库中获取数据并将其索引到 Elasticsearch。 https://www.elastic.co/blog/logstash-jdbc-input-plugin

当我运行/opt/logstash-2.3.3/bin/logstash -v -f es_table.logstash.conf
我收到以下错误:

Pipeline aborted due to error 
{:exception=>#<LogStash::ConfigurationError: org.postgres.Driver not loaded. 
Are you sure you've included the correct jdbc driver in :jdbc_driver_library?>, :backtrace=>["/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-3.0.2/lib/logstash/plugin_mixins/jdbc.rb:156:in `prepare_jdbc_connection'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-3.0.2/lib/logstash/plugin_mixins/jdbc.rb:148:in `prepare_jdbc_connection'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-3.0.2/lib/logstash/inputs/jdbc.rb:167:in `register'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.3-java/lib/logstash/pipeline.rb:330:in `start_inputs'", "org/jruby/RubyArray.java:1613:in `each'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.3-java/lib/logstash/pipeline.rb:329:in `start_inputs'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.3-java/lib/logstash/pipeline.rb:180:in `start_workers'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.3-java/lib/logstash/pipeline.rb:136:in `run'", "/opt/logstash-2.3.3/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.3-java/lib/logstash/agent.rb:473:in `start_pipeline'"], :level=>:error}

这是我的 Logstash 配置的一部分:

input {
   jdbc {
      jdbc_user => 'user'
      jdbc_driver_class => 'org.postgresql.Driver'
      jdbc_connection_string => 'jdbc:postgresql://1.1.1.1:5432/db'
      lowercase_column_names => false
      clean_run => false
      jdbc_driver_library => '/usr/share/java/postgresql-jdbc4.jar'
      jdbc_password => 'pass'
      jdbc_validate_connection => true
      jdbc_page_size => 1000
      jdbc_paging_enabled => true
      statement => 'SELECT * FROM "table"'
      type => 'table'
   }
...

jdbc4 驱动存在。我也尝试了jdbc3,但没有成功。

ls /usr/share/java | grep postgresql-jdbc
postgresql-jdbc3-9.2.jar
postgresql-jdbc3.jar
postgresql-jdbc4-9.2.jar
postgresql-jdbc4.jar

Driver 类在里面:

jar tf /usr/share/java/postgresql-jdbc4.jar | grep -i driver
org/postgresql/Driver$1.class
org/postgresql/Driver$ConnectThread.class
org/postgresql/Driver.class
org/postgresql/util/PSQLDriverVersion.class
META-INF/services/java.sql.Driver

5432端口打开:

telnet 192.168.109.108 5432
Trying 192.168.109.108...
Connected to 192.168.109.108.
Escape character is '^]'.

对数据库的身份验证有效。

【问题讨论】:

    标签: jdbc logstash


    【解决方案1】:

    问题是我输入了驱动名称错误。

    我写了jdbc_driver_class =&gt; 'org.postgres.Driver'

    正确的名字是jdbc_driver_class =&gt; 'org.postgresql.Driver'

    【讨论】:

      【解决方案2】:

      我按照issue 中建议的解决方法解决了这个问题

      原因:

      这是我们在 JDK 9 (Jigsaw) 中的模块更改时遇到的一个已知问题。类加载器已经看到了一些变化,我们之前添加到一些驱动程序加载的解决方法现在失败了。 jdbc 输入在 JDK 11 (9+) 中同样失败。我们正在努力修复。

      对我有用的解决方法:

      一个“极端”的解决方法是将驱动程序文件复制到 /logstash-core/lib/jars/ 目录。当通过 java 启动 logstash 时,这些 jar 将被添加到正确的 JDK 类路径中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        相关资源
        最近更新 更多