【问题标题】:Logstash error Java::JavaLang::NoClassDefFoundError unable to resolveLogstash 错误 Java::JavaLang::NoClassDefFoundError 无法解决
【发布时间】:2021-09-25 07:13:36
【问题描述】:

我是 elasticsearch(ES) 和 logstash 的新手。我已经使用link 成功设置了 elasticsearch 和 kibana。在此之后,我尝试使用 logstash 将一个表从 sql server 上传到 ES。我的logstash conf文件如下:

input {
  jdbc {
  clean_run => true
    jdbc_driver_library => "/home/myusr/Downloads/sqljdbc_6.0/enu/jre8/sqljdbc42.jar"
    jdbc_connection_string => "jdbc:sqlserver://xyz;databaseName=test;user=name;password=pass@123;"
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_validate_connection => true
    jdbc_user => "name"
    jdbc_password => "pass@123"
    statement => "SELECT top 10 * FROM mytable"
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my_table"
 }

}

在运行此文件时,我得到:

[ERROR] 2021-07-16 18:13:55.567 [[main]<jdbc] jdbc - Unable to connect to database. Tried 1 times {:message=>"Java::JavaLang::NoClassDefFoundError: javax/xml/bind/DatatypeConverter", :exception=>Sequel::DatabaseConnectionError, :cause=>java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter, :backtrace=>["com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(com/microsoft/sqlserver/jdbc/SQLServerConnection.java:4098)"

按照here 的建议删除 java11 版本后,我尝试重新安装 java8。但它没有用。我没有使用任何 gradle 或 IDE 来做 --add-modules 来解决这个问题。我正在跟进这个link,但目前还没有解决方案。我遇到了这个障碍。我也检查了这个link。我在这里没有做的唯一步骤是“使用映射创建 Elasticsearch 索引”。这是问题的原因吗?我该如何解决这个问题?

感谢任何帮助。

【问题讨论】:

    标签: java sql-server elasticsearch logstash


    【解决方案1】:

    我找到了问题的解决方案。

    如果您看到上面的链接,它们会将sqljdbc42.jar 显示为 JDBC SQL Server 驱动程序,其路径必须保存在jdbc_driver_library 中。这是Microsoft website 上可用的驱动程序,格式为 tar.gz。但是,当我在link(zip 文件中的驱动程序)中将驱动程序更改为“mssql-jdbc-9.2.1.jre11.jar”时,它起作用了。我还更改了 Logstash 文件中的 jdbc_driver_library,如 link 中给出的那样。

    更新后的 Logstash conf 文件如下所示:

    input {
      jdbc {
      clean_run => true
        jdbc_driver_library => ""
        jdbc_connection_string => "jdbc:sqlserver://xyz;databaseName=test;user=name;password=pass@123;"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        jdbc_validate_connection => true
        jdbc_user => "name"
        jdbc_password => "pass@123"
        statement => "SELECT top 10 * FROM mytable"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["localhost:9200"]
        index => "my_table"
     }
    }
    

    请注意jdbc_driver_library 分配给一个空字符串。之所以可以这样做,是因为我们已经设置了 JDBC 驱动程序文件的路径,以便 Logstash 可以找到它。除了将路径设置为here 之外,我还将我的 jar 文件复制到此位置:/usr/share/logstash/logstash-core/lib/jars/ 以便 Logstash 轻松找到驱动程序。

    使用上述方法,我能够成功连接以将数据从 SQL 服务器迁移到弹性搜索。

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2023-03-27
      • 2018-01-05
      • 1970-01-01
      • 2019-11-14
      • 2013-12-15
      • 2018-06-05
      • 2015-04-08
      • 2018-03-06
      相关资源
      最近更新 更多