环境:ElasticSearch7.8.0 + logstash7.8.0
以上方案是我所了解的。也参考过网上说的利用canal,这个我不了解所以也没写。
接下来介绍 方案1
关于elasticsearch与logstash的配置请参考:
《Springboot整合ELK日志收集详解步骤》
准备oracle驱动jar,ojdbc7-12.1.0.2.jar。
在%logstash_home%\bin 下新建配置文件jdbc.conf,内容如下:
input {
jdbc {
jdbc_driver_library => "E:/12.1.0.2/ojdbc7-12.1.0.2.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_connection_string => "jdbc:oracle:thin:@localhost:1521:orcl"
jdbc_user => "scott"
jdbc_password => "tigger"
statement => "SELECT * FROM (SELECT NP.*, ROWNUM RN FROM (SELECT * FROM PRODUCTS) NP) T WHERE T.CREATE_TIME BETWEEN to_date('2019-01-01', 'yyyy-mm-dd') AND to_date('2019-06-30', 'yyyy-mm-dd') AND RN > :sql_last_value "
record_last_run => "true"
use_column_value => "true"
tracking_column => "RN"
last_run_metadata_path => "E:/es/logstash-7.8.0/config/last_id"
clean_run => "false"
type => "es-jdbc"
}
}
output {
if [type] == "es-jdbc" {
elasticsearch {
hosts => "localhost:9200"
index => "p_users_index"
document_id => "%{id}"
}
}
}
jdbc_driver_library:你的驱动jar包位置
jdbc_driver_class:驱动类,注意Java::开头
jdbc_connection_string:jdbc连接url
jdbc_user:oracle用户名
jdbc_password:oracle密码
statement:执行的SQL;根据sql直接结果导入到es中
record_last_run:是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
use_column_value: 是否需要记录某个column 的值,如果record_last_run为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值
tracking_column: 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是mysql主键,由于我们使用rownum也是递增的,可以在sql语句中查询出rownum作为这一列,sn是rownum别名
last_run_metadata_path:将最后运行的位置记录在指定的路径文件中。
启动logstash服务
%logstash_home%\bin\logstash -f jdbc.conf
通过Kibana实时查看数据同步情况
也可以通过接口查看
给个关注+转发呗,谢谢
SpringBoot配置文件你了解多少?
使用Spring Boot Admin实时监控你的系统
Spring Boot Security防重登录及在线总数
SpringBoot多数据源配置详解
SpringBoot项目查看线上日志
SpringBoot邮件发送示例
springboot mybatis jpa 实现读写分离
Springboot整合RabbitMQ死信队列详解
SpringBoot RabbitMQ消息可靠发送与接收