以前使用过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所在的安装目录
输出插件:
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.youkuaiyun.com/FannieCream/article/details/107624147