使用 logstash jcdc 输出时出现 IllegalAccessError

IllegalAccessError when using logstash jcdc output

我有一个简单的 logstash 配置:

input {
      jdbc {
      jdbc_driver_library => "..\sqljdbc_6.0\enu\jre8\sqljdbc42.jar"
      jdbc_connection_string => "jdbc:sqlserver:/server:1433;databaseName=DBNAME;integratedSecurity=true;"
      jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
      statement => "select top(10) eventdata from TABLE"       
        schedule => "*/20 * * * * *"
           }
    }

    output {
        jdbc {
            connection_string  => "jdbc:sqlserver://DBSERVER:1433;databaseName=DBNAME;integratedSecurity=true;"
            driver_jar_path  =>"..\sqljdbc_6.0\enu\jre8\sqljdbc42.jar"
            statement => ["insert into TABLENAME(t) values(?)", "@timestamp"]
      }  
    }

输入部分可以很好地读取数据库中的值。但是,当它尝试输出到另一个数据库时,我收到以下错误:

 Java::JavaLang::IllegalAccessError: com/microsoft/sqlserver/jdbc/StreamError
  2076       com.microsoft.sqlserver.jdbc.TDSTokenHandler.onError(com/microsoft/sqlserver/jdbc/tdsparser.java:222)
  2076       com.microsoft.sqlserver.jdbc.TDSParser.parse(com/microsoft/sqlserver/jdbc/tdsparser.java:83)

我正在使用 logstash 6.5、sqljdbc 4.2 和 OpenJDK (Amazon Corretto 8.2 JRE)

当我将输出配置更改为输出到文件或控制台时,它工作正常。

任何帮助将不胜感激。

我找到了这个问题的解决方案并张贴在这里以防有人遇到类似问题。

logstash_jdbc_output 插件已使用 Oracle JDK 安装到 logstash。后来,Oracle JDK 已被 Open JDK 取代,这就是问题的原因。解决方案是使用 Open JDK.

重新安装插件