4

我是弹性搜索(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 索引”。这是问题的原因吗?我该如何解决这个问题?

任何帮助表示赞赏。

4

1 回答 1

1

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

如果您看到上面的链接,它们显示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 服务器迁移到弹性搜索。

于 2021-07-20T16:56:14.067 回答