LogStash+MySQL+Elasticsearch实现数据增量导入

1        环境准备

1.1        上传数据库驱动

LogStash本身不提供数据库驱动,需要使用者提供数据库的驱动包,且LogStash中的数据库JDBC插件就是Java开发的。需要上传数据库驱动到LogStash所在主机。

Logstash5.x & 6.3.*以下版本,上传驱动不需要固定位置,任意位置即可。

Logstash6.8.4版本的上传位置固定是:$LogStash_HOME/logstash_core/lib/jars/

1.2        准备数据库表格

LogStash实现增量导入,需要有一个定位字段,这个字段的数据,可以表示数据的新旧,代表这个数据是否是一个需要导入到ES中的数据。这里使用表格的updated字段作为定位字段,每次读取数据的时候,都会记录一个最大的updated时间,每次读取数据的时候,都读取updated大于等于记录的定位字段数据。每次查询的就都是最新的,要导入到ES中的数据。

2       编写LogStash配置文件

在$LogStash_home/config/目录中,编写配置文件ego-items-db2es.conf

vim config/ego-items-db2es.conf

input {

  jdbc {

    # 连接地址

    jdbc_connection_string => "jdbc:mysql://192.168.1.2:3306/ego?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"

 

    # 数据库用户名和密码

    jdbc_user => "root"

    jdbc_password => "root"

 

    # 驱动类,如果使用低版本的logstash,需要再增加配置 jdbc_driver_library,配置驱动包所在位置

    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"

    # 是否开启分页逻辑

    jdbc_paging_enabled => true

    # 分页的长度是多少

    jdbc_page_size => "2000"

    # 时区

    jdbc_default_timezone => "Asia/Shanghai"

 

    # 执行的SQL

    statement => "select id, title, sell_point, price, image, updated from tb_item where updated >= :sql_last_value order by updated asc"

 

    # 执行SQL的周期, [秒] 分钟 小时 天 月 年

    schedule => "* * * * *"

 

    # 是否使用字段的值作为比较策略

    use_column_value => true

    # 作为比较策略的字段名称

    tracking_column => "updated"

    # 作为比较策略的字段类型,可选为numberic和timestamp

    tracking_column_type => "timestamp"

 

    # 记录最近的比较策略字段值的文件是什么,相对寻址路径是logstash的安装路径

    last_run_metadata_path => "./ego-items-db2es-last-value"

    # 是否每次执行SQL的时候,都删除last_run_metadata_path文件内容

    clean_run => false

    # 是否强制把ES中的字段名都定义为小写。

    lowercase_column_names => false

  }

}

 

output {

  elasticsearch {

    hosts => ["http://192.168.89.140:9200", "http://192.168.89.141:9200"]

    index => "ego-items-index"

    action => "index"

    document_id => "%{id}"

  }

}

 

3       安装logstash-input-jdbc插件

在LogStash6.3.x和5.x版本中,logstash-input-jdbc插件是默认安装的。在6.8.4版本的LogStash中是未安装的,需要手工安装。安装命令如下:

$Logstash_HOME/bin/logstash-plugin install logstash-input-jdbc

 

4       启动测试

启动LogStash命令不变:

bin/logstash -f 配置文件

posted @ 2022-10-31 14:14  Recouar  阅读(165)  评论(0编辑  收藏  举报