本文介紹了Logstash錯誤Java::JavaLang::NoClassDefFoundError無法解析的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我是使用ElasticSearch(ES)和logstash的新手。我已經使用這個link成功設置了ElasticSearch和kibana。在此之后,我嘗試使用logstash將一個表從SQL server上傳到ES。我的logstash配置文件如下所示:
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索引。這就是問題的原因嗎?如何解決此問題?
感謝任何幫助。
推薦答案
我找到了問題的解決方案。
如果您看到上面的鏈接,它們會將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 Server遷移到Elastic Search。
這篇關于Logstash錯誤Java::JavaLang::NoClassDefFoundError無法解析的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,