IllegalAccessError при использовании вывода logstash jcdc

У меня есть простая конфигурация 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)

Когда я изменяю выходную конфигурацию для вывода в файл или консоль, она работает нормально.

Любая помощь будет оценена.

1 ответ

Решение

Я нашел решение этой проблемы и разместил его здесь на случай, если кто-то столкнется с подобной проблемой.

Плагин logstash_jdbc_output был установлен для logstash с использованием Oracle JDK. Позднее Oracle JDK был заменен на Open JDK, который стал причиной проблемы. Решением было переустановить плагин с помощью Open JDK.

Другие вопросы по тегам