Я пытаюсь настроить простой конвейер Logsta sh 7.6.0 с входным плагином JDB C, который подключается к Oracle DB.
Что бы я ни пытался, я всегда получаю одно и то же ошибка:
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. Оно работает.
Я запускаю logsta sh в образе Docker, поэтому я попытался локально, и я получил точно такой же результат.
- Я заново загрузил jar драйвера (см. URL ниже)
- Я проверил строку подключения (используя простую программу java, см. ниже)
- Я попытался использовать H2, и работает (см. конфигурацию ниже)
- I попытался добавить журнал (см. ниже)
- Я пробовал "oracle .jdb c .OracleDriver" и "oracle .jdb c .driver.OracleDriver"
- I проверил с неправильным именем файла в "jdbc_driver_library" и получил другую ошибку
- Я заглянул внутрь фляги драйвера, там есть класс. (см. ниже)
У меня заканчиваются опции.
Некоторые детали:
Вот мой конфиг для 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
}
}
Первоначально я получил драйвер из моего локального репозитория ".m2" maven, так что просто для того, чтобы убедиться, что я повторно загрузил драйвер из: https://download.oracle.com/otn/utilities_drivers/jdbc/121010/ojdbc7.jar
Если я ошибаюсь в "jdbc_driver_library ", Я получаю другую ошибку, поэтому я знаю, что мой путь хорош
Я заглянул внутрь банки и вижу драйвер:
Я создал этот простой java класс для проверки строки драйвера / соединения, и он просто отлично работает:
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, и он работал безупречно с первой попытки, вот конфиг, который работает (с запущенным tcp-сервером H2). Почти идентичный Oracle config
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
Но я больше ничего не получил.
У меня нет вдохновения.
Есть идеи?
Спасибо