Logstash 导入数据到 ES

安装后的日志文件目录

/var/log/logstash-stdout.log

/var/log/logstash-stderr.log

导入的设置文件路径

/etc/logstash/conf.d

ORACLE转ES

使用 logstash-input-jdbc 插件读取 oracle 的数据,这个插件的工作原理比较简单,就是定时执行一个 sql,然后将 sql 执行的结果写入到流中,增量获取的方式没有通过 binlog 方式同步,而是用一个递增字段作为条件去查询,每次都记录当前查询的位置,由于递增的特性,只需要查询比当前大的记录即可获取这段时间内的全部增量,一般的递增字段有两种,AUTO_INCREMENT 的主键 id 和 ON UPDATE CURRENT_TIMESTAMP 的 update_time 字段,id 字段只适用于那种只有插入没有更新的表,update_time 更加通用一些,建议在 oracle 表设计的时候都增加一个 update_time 字段

input {
  jdbc {
    jdbc_driver_library => "../mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://<mysql_host>:3306/rta"
    jdbc_user => "<username>"
    jdbc_password => "<password>"
    schedule => "* * * * *"
    statement => "SELECT * FROM table WHERE update_time >= :sql_last_value"
    use_column_value => true
    tracking_column_type => "timestamp"
    tracking_column => "update_time"
    last_run_metadata_path => "syncpoint_table"
  }
}
  • jdbc_driver_library: jdbc oracle 驱动的路径,在上一步中已经下载
  • jdbc_driver_class: 驱动类的名字,oracle 填 Java::oracle.jdbc.driver.OracleDriver 
  • jdbc_connection_string: oracle地址
  • jdbc_user: oracle用户
  • jdbc_password: oracle密码
  • schedule: 执行 sql 时机,类似 crontab 的调度
  • statement: 要执行的 sql,以 ":" 开头是定义的变量,可以通过 parameters 来设置变量,这里的 sql_last_value 是内置的变量,表示上一次 sql 执行中 update_time 的值,这里 update_time 条件是 >= 因为时间有可能相等,没有等号可能会漏掉一些增量
  • use_column_value: 使用递增列的值
  • tracking_column_type: 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
  • tracking_column: 递增字段的名称,这里使用 update_time 这一列,这列的类型是 timestamp
  • last_run_metadata_path: 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改
output {
  elasticsearch {
    hosts => ["172.31.22.165", "172.31.17.241", "172.31.30.84", "172.31.18.178"]
    user => "<user>"
    password => "<password>"
    index => "table"
    document_id => "%{id}"
  }
}
  • hosts: es 集群地址
  • user: es 用户名
  • password: es 密码
  • index: 导入到 es 中的 index 名,这里我直接设置成了 mysql 表的名字
  • document_id: 导入到 es 中的文档 id,这个需要设置成主键,否则同一条记录更新后在 es 中会出现两条记录,%{id} 表示引用 mysql 表中 id 字段的值

input {
    jdbc {
       jdbc_connection_string => "jdbc:oracle:thin:@127.0.0.1:1521:orcl"
       jdbc_user => "<username>"
       jdbc_password => "<password>"
       jdbc_driver_library => "/etc/logstash/conf.d/sql/ojdbc6.jar"
       jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
       schedule => "* * * * *"
       statement_filepath => "/etc/logstash/conf.d/sql/aiqa_list.sql"
       record_last_run => true
       use_column_value => true
       tracking_column => "op_date_timestamp"
       codec => plain { charset => "UTF-8"}
       tracking_column_type => "timestamp"
       last_run_metadata_path => "/etc/logstash/conf.d/sql/aiqa_list_last_id"
       clean_run => "false"
       jdbc_paging_enabled => true
       jdbc_page_size => "10000"      
       type => "aiqa_list"
   }
}

output {
    if [type] == "aiqa_list" {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "aiqa_list"
            document_id => "%{op_date_timestamp}"
        }
    }
}


aiqa_list

SELECT cid, theme, titlea, titleb, clevel, TYPE ctype, CONTENT, lid, isvalid, readnum, op_id, op_name, op_date, cast(op_date as timestamp) op_date_timestamp FROM ai_list WHERE cast(op_date as timestamp) > :sql_last_value

aiqa_list_last_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值