我有一个简单的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"]
}
}
输入部分可以很好地从db读取值。但是,当它尝试输出到另一个数据库时,出现以下错误:
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)
当我将输出配置更改为输出到文件或控制台时,它可以正常工作。
任何帮助将不胜感激。
答案 0 :(得分:0)
我找到了解决此问题的方法,并将其发布在此处,以防有人遇到类似问题。
logstash_jdbc_output插件已使用Oracle JDK安装到logstash。后来,Oracle JDK被Open JDK取代,这是问题的原因。解决方案是使用Open JDK重新安装插件。