#<Sequel::JDBC::Database:0 x764acb8b> 的未定义方法“close_jdbc_connection”

undefined method `close_jdbc_connection' for #<Sequel::JDBC::Database:0 x764acb8b>

我一直在尝试使用 Logstash 将数据从 MS SQL 服务器导入 Elastic Search。但是,我收到 logstash 管道和未定义方法“close_jdbc_connection”错误。我还没有找到这个问题的确切解决方案。使用的代码和报错信息如下 -

logstash 配置 -

input {
  jdbc {
   jdbc_driver_library => "C:\elasticsearch-5.4.3\elasticsearch-5.4.3\lib\sqljdbc42.jar"
   jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
   jdbc_connection_string => "jdbc:sqlserver://<servername>,<portname>;databaseName=<db_name>"
   jdbc_user => "user"
   jdbc_password => "password"
   statement => "select * from dbo.jobstatus"
   jdbc_paging_enabled => "true"
   jdbc_page_size => "50000"
   }
}
filter {
    mutate {
        remove_field => [ "message", "path", "score", "@version", "host" ]
    }
    #mutate { convert => ["REGCONNTYPEID","integer"]}
}

output {
    elasticsearch {
        hosts => "localhost"
        index => "sql_elk_dc_stats"
        document_type => "devices"
    }
    stdout { codec => rubydebug { metadata=> true } }
}

输出 -

[2017-10-15T18:20:11,768][INFO ][logstash.agent           ] Successfully started
 Logstash API endpoint {:port=>9600}
[2017-10-15T18:20:40,971][WARN ][logstash.inputs.jdbc     ] Failed test_connecti
on.
[2017-10-15T18:20:40,978][ERROR][logstash.pipeline        ] A plugin had an unre
coverable error. Will restart this plugin.
  Plugin: <LogStash::Inputs::Jdbc jdbc_driver_library=>"C:\elasticsearch-5.4.3\
\elasticsearch-5.4.3\lib\sqljdbc42.jar", jdbc_driver_class=>"com.microsoft.sql
server.jdbc.SQLServerDriver", jdbc_connection_string=>"jdbc:sqlserver://<servername>,<port>;databaseName=db_name", jdbc
_user=>"user", jdbc_password=><password>, statement=>"select * from dbo.jo
bstatus", jdbc_paging_enabled=>true, jdbc_page_size=>50000, id=>"36bb27ae9af8f6a
086048a0a0f6a22d4a32b1be6-1", enable_metric=>true, codec=><LogStash::Codecs::Pla
in id=>"plain_8d7b9383-b58f-4dfe-82c8-20066ced2652", enable_metric=>true, charse
t=>"UTF-8">, jdbc_validate_connection=>false, jdbc_validation_timeout=>3600, jdb
c_pool_timeout=>5, sql_log_level=>"info", connection_retry_attempts=>1, connecti
on_retry_attempts_wait_time=>0.5, parameters=>{"sql_last_value"=>false}, last_ru
n_metadata_path=>"C:\Users\ghosmrin/.logstash_jdbc_last_run", use_column_value
=>false, tracking_column_type=>"numeric", clean_run=>false, record_last_run=>tru
e, lowercase_column_names=>true>
  Error: undefined method `close_jdbc_connection' for #<Sequel::JDBC::Database:0
x764acb8b>

注意 - 我使用的是 windows7, ELK 5.4.3 版本。 sql 登录能够连接到 SQL 服务器。

看起来有一个错误 https://github.com/logstash-plugins/logstash-input-jdbc/issues/227 - that was reported in July - It looks like it made it into the 4.2.4 version of the JDBC plugin https://github.com/logstash-plugins/logstash-input-jdbc/blob/v4.2.4/CHANGELOG.md - 您使用的是早期版本的插件吗?

话虽如此,我怀疑您的连接仍然存在问题,该插件可能只是无法很好地处理连接问题...因为您已经明智地更换了 db/server 详细信息,所以不可能断然说连接字符串是否有问题......我要说的一件事是你需要在服务器和端口之间有一个冒号(你有一个逗号),你可能还需要在末尾有一个分号字符串,但我认为这不是绝对必要的:

jdbc_connection_string => "jdbc:sqlserver://<servername>:<portname>;databaseName=<db_name>;"

https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url