簡體   English   中英

Logstash 錯誤 Java::JavaLang::NoClassDefFoundError 無法解決

[英]Logstash error Java::JavaLang::NoClassDefFoundError unable to resolve

我是elasticsearch(ES)和logstash的新手。 我已使用此鏈接成功設置了 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)"

在按照此處的建議刪除 java11 版本后,我嘗試重新安裝 java8。 但它沒有用。 我沒有使用任何 gradle 或 IDE 來做--add-modules來解決這個問題。 我正在關注此鏈接,但目前還沒有解決方案。 我遇到了這個障礙。 我也檢查了這個鏈接 我在這里沒有做的唯一步驟是“使用映射創建 Elasticsearch 索引”。 這是問題的原因嗎? 我該如何解決這個問題?

任何幫助表示贊賞。

我找到了問題的解決方案。

如果您看到以上鏈接,它們將sqljdbc42.jar顯示為 JDBC SQL Server 驅動程序,其路徑必須保留在jdbc_driver_library 這是Microsoft 網站上提供的 tar.gz 驅動程序。 但是,當我在此鏈接(zip 文件中的驅動程序)中將驅動程序更改為“mssql-jdbc-9.2.1.jre11.jar”時,它起作用了。 我也改變了jdbc_driver_library在Logstash文件在此給出的鏈接

更新后的 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 可以找到它。 除了設置此處給出的路徑外,我還將我的 jar 文件復制到以下位置: /usr/share/logstash/logstash-core/lib/jars/以便 Logstash 輕松找到驅動程序。

使用上述方法,我能夠成功連接以將數據從 SQL 服務器遷移到彈性搜索。

暫無
暫無

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

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