Logstash Oracle 驱动程序问题
Logstash Oracle Driver issue
我正在尝试使用连接到 Oracle 数据库的 JDBC 输入插件设置简单的 Logstash 7.6.0 管道。
无论我尝试什么,我总是得到同样的错误:
2052 LogStash::PluginLoadingError
2052 oracle.jdbc.OracleDriver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?
2052 C:/Apps/logstash/logstash-7.6.0/vendor/bundle/jruby/2.5.0/gems/logstash-integration-jdbc-5.0.0/lib/logstash/plugin_mixins/jdbc/jdbc.rb:179:in `open_jdbc_connection'
2052 C:/Apps/logstash/logstash-7.6.0/vendor/bundle/jruby/2.5.0/gems/logstash-integration-jdbc-5.0.0/lib/logstash/plugin_mixins/jdbc/jdbc.rb:242:in `execute_statement'
这似乎仅影响 Oracle 驱动程序。我试过使用 H2(详见下文)、PostgreSQL。有用。
我是 运行 logstash 在 Docker 图像中,所以我在本地尝试,得到完全相同的结果。
- 我重新下载了驱动程序 jar(请参阅下面的 url)
- 我检查了连接字符串(使用一个简单的 java 程序,见下文)
- 我尝试使用 H2,并且有效(请参阅下面的配置)
- 我尝试添加日志(见下文)
- 我试过"oracle.jdbc.OracleDriver"和"oracle.jdbc.driver.OracleDriver"
- 我在 "jdbc_driver_library" 中使用错误的文件名进行测试,得到了一个不同的错误
- 我查看了驱动程序 jar 里面,class 在那里。 (见下文)
我 运行 别无选择。
一些细节:
这是我的 Oracle 配置
input {
jdbc {
schedule => "*/5 * * * * *"
jdbc_connection_string => "jdbc:oracle:thin:@host:1521/service_name"
jdbc_driver_library => "C:/Apps/ORACLE_DRIVER/ojdbc7.jar"
jdbc_driver_class => "oracle.jdbc.OracleDriver"
statement => "SELECT p.* FROM person p "
jdbc_user => "x"
jdbc_password => "y"
}
}
output {
stdout {
codec => rubydebug
}
}
我最初是从本地 maven“.m2”存储库中获取驱动程序的,所以只是为了确保我从以下位置重新下载了驱动程序:https://download.oracle.com/otn/utilities_drivers/jdbc/121010/ojdbc7.jar
如果我拼错 "jdbc_driver_library",我会得到一个不同的错误,所以我知道我的路径是好的
我查看了罐子里面,我可以看到驱动程序:
我创建了这个简单的 java class 来测试驱动程序/连接字符串,它工作正常:
package oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
public class TestConnection {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:1521/service_name", "x", "y");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT p.* FROM person p");
while (rs.next()) {
System.out.println(rs.getString(1) + " : " + rs.getString(2));
}
System.out.println(new Date());
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
所以我继续尝试使用示例 H2 数据库,它在第一次尝试时完美运行,这是有效的配置(使用 H2 tcp 服务器 运行)。几乎与 Oracle 配置相同
input {
jdbc {
schedule => "*/5 * * * * *"
jdbc_connection_string => "jdbc:h2:tcp://localhost/~/test"
jdbc_driver_library => "C:/Apps/h2/h2.jar"
jdbc_driver_class => "org.h2.Driver"
statement => "SELECT p.* FROM public.person p"
jdbc_user => "sa"
jdbc_password => ""
}
}
output {
stdout {
codec => rubydebug
}
}
我尝试在 "logstash/config/log4j2.properties"
中添加日志
logger.jdbcinput.name = logstash.inputs.jdbc
logger.jdbcinput.level = DEBUG
但我什么也没有了。
我没灵感了
有什么想法吗?
谢谢
我终于在这里找到了答案:https://github.com/logstash-plugins/logstash-input-jdbc/issues/43
jdbc_driver_class => "oracle.jdbc.OracleDriver"
需要:
jdbc_driver_class => "Java::oracle.jdbc.OracleDriver
为什么要加这个Java::前缀?为什么它可以在没有它的情况下与其他驱动程序一起工作?没看懂。
我正在尝试使用连接到 Oracle 数据库的 JDBC 输入插件设置简单的 Logstash 7.6.0 管道。
无论我尝试什么,我总是得到同样的错误:
2052 LogStash::PluginLoadingError
2052 oracle.jdbc.OracleDriver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?
2052 C:/Apps/logstash/logstash-7.6.0/vendor/bundle/jruby/2.5.0/gems/logstash-integration-jdbc-5.0.0/lib/logstash/plugin_mixins/jdbc/jdbc.rb:179:in `open_jdbc_connection'
2052 C:/Apps/logstash/logstash-7.6.0/vendor/bundle/jruby/2.5.0/gems/logstash-integration-jdbc-5.0.0/lib/logstash/plugin_mixins/jdbc/jdbc.rb:242:in `execute_statement'
这似乎仅影响 Oracle 驱动程序。我试过使用 H2(详见下文)、PostgreSQL。有用。
我是 运行 logstash 在 Docker 图像中,所以我在本地尝试,得到完全相同的结果。
- 我重新下载了驱动程序 jar(请参阅下面的 url)
- 我检查了连接字符串(使用一个简单的 java 程序,见下文)
- 我尝试使用 H2,并且有效(请参阅下面的配置)
- 我尝试添加日志(见下文)
- 我试过"oracle.jdbc.OracleDriver"和"oracle.jdbc.driver.OracleDriver"
- 我在 "jdbc_driver_library" 中使用错误的文件名进行测试,得到了一个不同的错误
- 我查看了驱动程序 jar 里面,class 在那里。 (见下文)
我 运行 别无选择。
一些细节:
这是我的 Oracle 配置
input {
jdbc {
schedule => "*/5 * * * * *"
jdbc_connection_string => "jdbc:oracle:thin:@host:1521/service_name"
jdbc_driver_library => "C:/Apps/ORACLE_DRIVER/ojdbc7.jar"
jdbc_driver_class => "oracle.jdbc.OracleDriver"
statement => "SELECT p.* FROM person p "
jdbc_user => "x"
jdbc_password => "y"
}
}
output {
stdout {
codec => rubydebug
}
}
我最初是从本地 maven“.m2”存储库中获取驱动程序的,所以只是为了确保我从以下位置重新下载了驱动程序:https://download.oracle.com/otn/utilities_drivers/jdbc/121010/ojdbc7.jar
如果我拼错 "jdbc_driver_library",我会得到一个不同的错误,所以我知道我的路径是好的
我查看了罐子里面,我可以看到驱动程序:
我创建了这个简单的 java class 来测试驱动程序/连接字符串,它工作正常:
package oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
public class TestConnection {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:1521/service_name", "x", "y");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT p.* FROM person p");
while (rs.next()) {
System.out.println(rs.getString(1) + " : " + rs.getString(2));
}
System.out.println(new Date());
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
所以我继续尝试使用示例 H2 数据库,它在第一次尝试时完美运行,这是有效的配置(使用 H2 tcp 服务器 运行)。几乎与 Oracle 配置相同
input {
jdbc {
schedule => "*/5 * * * * *"
jdbc_connection_string => "jdbc:h2:tcp://localhost/~/test"
jdbc_driver_library => "C:/Apps/h2/h2.jar"
jdbc_driver_class => "org.h2.Driver"
statement => "SELECT p.* FROM public.person p"
jdbc_user => "sa"
jdbc_password => ""
}
}
output {
stdout {
codec => rubydebug
}
}
我尝试在 "logstash/config/log4j2.properties"
中添加日志logger.jdbcinput.name = logstash.inputs.jdbc
logger.jdbcinput.level = DEBUG
但我什么也没有了。
我没灵感了
有什么想法吗?
谢谢
我终于在这里找到了答案:https://github.com/logstash-plugins/logstash-input-jdbc/issues/43
jdbc_driver_class => "oracle.jdbc.OracleDriver"
需要:
jdbc_driver_class => "Java::oracle.jdbc.OracleDriver
为什么要加这个Java::前缀?为什么它可以在没有它的情况下与其他驱动程序一起工作?没看懂。