logstash 同步mongo 数据到 mysql

以前使用过mongo-connector 同步mongo 数据到es,但无法同步到mysql。

一、软件版本

mysql:5.7

mongo:3.2

logstash:5.4.0 (同ES版本)

二、相关依赖

输入插件:

logstash-jdbc-input 是Logstash提供的官方插件之一,该插件通过JDBC接口将任何数据库中的数据导入 Logstash。关于使用logstash-jdbc-input 插件从数据库中导出数据到es上,大部分是关于mysql数据库的导入 

下载地址:https://dbschema.com/jdbc-drivers/MongoDbJdbcDriver.zip 

(安装包里面包括三个jar包文件:gson-2.8.6.jar、mongo-java-driver-3.12.4.jar、mongojdbc3.1.jar)
将所有文件(即三个jar包)复制到(~/logstash-7.6.2/logstash-core/lib/jars/)目录(即你的logstash所在的安装目录

输出插件:

GitHub项目地址

logstash-output-jdbc  使用 bin/logstash-plugin install logstash-output-jdbc在您的logstash安装目录中运行 。

安装不成功  更换GemFIle 中的source 源为 "https://gems.ruby-china.com"

三、配置文件

3.1 input

input {
  jdbc {
    jdbc_driver_class => "com.dbschema.MongoJdbcDriver"
    # jar包的目录 指定刚刚下载的jar路径
    jdbc_driver_library => "logstash/logstash-core/lib/jars/mongojdbc2.1.jar"
    # mongo数据库对应的uri
    jdbc_connection_string => "jdbc:mongodb://ip:27017/dbname"
    # 没有的话可以不填
    jdbc_user => ""
    # 这个不填
    jdbc_password => ""
    # 表示每分钟中执行一次,以实现实时同步的效果
    schedule => "* * * * *"
    # 实现增量同步的mongodb的查询语句  
    statement => "db.collectionName.find({'createTime':{ $gte: :sql_last_value}},{_id: 0})"
    # 保存上一次执行时间的文件
    last_run_metadata_path => "logstash/hisdata"
  }
}

在编写mongodb查询语句时我们需要注意,由于logstash无法识别mongodb中的 ObjectId类型,因此我们需要抛弃该字段,因此在find语句中我们设置_id:0,即表示不需要该字段
增量同步 :sql_last_value :logstash中提供的一个协助查询的时间参数,默认值是1970-01-01 08:00:00,数据类型是string,每次执行命令之后,该值会替换成执行命令时刻的时间 

3.2 Filter

filter{ 
    json{   
        source => "message"
    }       
} 

filter部分主要是针对mongodb中的数据进行预处理,如果不需要进行预处理,这部分内容不必填写;filter 插件很多https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

3.3 Output

output {
  stdout{     
        codec=>rubydebug{}
  }
  jdbc {
    #mysql-connector-java jar包路径。 我直接用hive带的 mysql-connector-java-5.1.46-bin.jar
    driver_jar_path => "jar/mysql-connector-java-5.1.46-bin.jar"
    driver_class => "com.mysql.jdbc.Driver"
    connection_string=>"jdbc:mysql://ip:3306/test? 
     user=datag&password=yjkdatag&characterEncoding=UTF-8"
    statement => [ "INSERT INTO test (name, sex,goodscitys) VALUES(?, ? ,? )", "[document] 
    [goodsId]", "[document][goodsUserLables]","[document][goodsCitys]"]" ]
 } 
    
} 

以上就是配置文件内容 mongo_mysql.conf

四、运行

bin/logstash -f mongo_mysql.conf 

注意事项:

关于logstash Event 数据取值  Logstash的字段引用语法。访问字段的基本语法是[fieldname]。如果您指的是 顶级字段,则可以省略[]并简单地使用fieldname。要引用嵌套字段,请指定该字段的完整路径:[顶级字段][嵌套字段]。

有什么问题欢迎留言

参考链接:https://blog.csdn.net/FannieCream/article/details/107624147

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值