logstash同步oracle到es

环境:

DB:11.2.0.4

 

同步的表

复制代码
create table tb_test (
  id number primary key,
  name varchar(32) not null,
  f_int number,
  f_dou number(10,2),
  f_flo number(9,2)
);



insert into tb_test (id,name,f_int,f_dou,f_flo) values(1,'name1',100,123.12,16.26);
insert into tb_test (id,name,f_int,f_dou,f_flo) values(2,'name2',200,323.12,26.46);
insert into tb_test (id,name,f_int,f_dou,f_flo) values(3,'name3',300,423.12,36.36);
insert into tb_test (id,name,f_int,f_dou,f_flo) values(4,'name4',400,623.12,46.56);
insert into tb_test (id,name,f_int,f_dou,f_flo) values(5,'name5',500,723.12,56.66);
insert into tb_test (id,name,f_int,f_dou,f_flo) values(6,'name5',500,723.12,56.66);
insert into tb_test (id,name,f_int,f_dou,f_flo) values(7,'name5',500,723.12,56.66);
复制代码

 

配置文件(通过id进行增量同步)

复制代码
[root@host135 config]# more sync_ora2es_byid.conf 
#logstash输入配置
input {
  #jdbc输入配置,用来指定mysql中需要同步的数据查询SQL及同步周期
  jdbc {

    jdbc_driver_library => "/soft/ojdbc/ojdbc8.jar"
    jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@192.168.1.7:1521:orcl"
    jdbc_user => "hxl"
    jdbc_password => "oracle"

    # 是否开启分页
    jdbc_paging_enabled => true
    # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
    use_column_value => true
    #用来控制增量更新的字段,一般是自增id或者创建,更新时间,注意这里要采用sql语句中select采用的字段别名
    tracking_column => "id"
    # tracking_column 对应字段的类型
    tracking_column_type => "numeric"
    # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务,这里设置为每5分钟同步一次
    schedule => "*/5 * * * * *"
    #同步数据的查询sql语句
    statement => "select id,name,f_int,f_dou,f_flo from tb_test where id>:sql_last_value"
last_run_metadata_path => "/opt/logstash-6.8.5/logs/tb_test.txt"
} } #logstash输入数据的字段匹配和数据过滤 filter { mutate { copy => { "id" => "[@metadata][_id]"} remove_field => ["@version","@timestamp"] } } #logstash输出配置 output { #采用stdout可以将同步数据输出到控制台,主要是调试阶段使用 stdout { codec => "rubydebug"} #指定输出到ES的具体索引 elasticsearch { hosts => ["http://192.168.1.134:19200"] user => "elastic" password => "elastic" index => "index_ora_tb_test" document_id => "%{[@metadata][_id]}" } }
复制代码

 

通过update_time类型为date的同步配置文件

复制代码
[root@host135 config]# more sync_ora2es_bytime.conf
#logstash输入配置
input {
  #jdbc输入配置,用来指定mysql中需要同步的数据查询SQL及同步周期
  jdbc {

    jdbc_driver_library => "/soft/ojdbc/ojdbc8.jar"
    jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@192.168.1.7:1521:orcl"
    jdbc_user => "hxl"
    jdbc_password => "oracle"

    # 是否开启分页
    jdbc_paging_enabled => true
    # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
    use_column_value => true
    #用来控制增量更新的字段,一般是自增id或者创建,更新时间,注意这里要采用sql语句中select采用的字段别名
    tracking_column => "update_time"
    # tracking_column 对应字段的类型
    tracking_column_type => "timestamp"
    # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务,这里设置为每5分钟同步一次
    schedule => "*/5 * * * * *"
    #同步数据的查询sql语句
    statement => "select id,name,f_int,f_dou,f_flo,to_char(create_time,'YYYY-MM-DD HH24:MI:SS') as create_time, to_cha
r(update_time,'YYYY-MM-DD HH24:MI:SS') as update_time from tb_ora_es where update_time>to_date(to_char(:sql_last_value
,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')"
  }
}

#logstash输入数据的字段匹配和数据过滤
filter {
  mutate {
    copy => { "id" => "[@metadata][_id]"}
    remove_field => ["@version","@timestamp"]
  }
}

#logstash输出配置
output {
  #采用stdout可以将同步数据输出到控制台,主要是调试阶段使用
  stdout { codec =>  "rubydebug"}

  #指定输出到ES的具体索引
  elasticsearch {
      hosts => ["http://192.168.1.134:19200"]
      user => "elastic"
      password => "elastic"
      index => "index_tb_ora_es"
      document_id => "%{[@metadata][_id]}"
  }
}
复制代码

 

 

 

 

 

jdbc驱动下载ojdbc8.jar

https://www.oracle.com/cn/database/technologies/appdev/jdbc-downloads.html

 

好像ojdbc11.jar不支持,我这里的logstash版本是:6.8.5

 

posted @   slnngk  阅读(432)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-11-01 postgresql13 rpm方式安装(推荐)+主从部署
2019-11-01 golang查询数据遇到空值问题
点击右上角即可分享
微信分享提示