准备工作:
1.有mysql的连接方式,并且可以连接成功
2.有es的连接方式,并且可以连接成功
3.安装了docker
环境是Ubuntu中安装了docker
一、创建配置文件,用于容器卷挂载
切换目录,可自定义
cd /home/test/
创建logstash挂载的本地目录
mkdir logstash
cd logstash
mkdir config
mkdir pipeline
进入到config目录下,创建配置文件
cd config
创建mysql同步es数据的配置文件
vim jdbc.conf
input { jdbc { jdbc_driver_library => "/home/test/logstash/mysql-connector-j-8.0.32.jar" jdbc_driver_class => "com.mysql.cj.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/_test" jdbc_user => "root" jdbc_password => "root" #启用分页,默认false jdbc_paging_enabled => "true" #页面大小 jdbc_page_size => "500" #是否记录上次运行的结果 record_last_run => true #记录上次运行结果的文件位置 last_run_metadata_path => "/usr/share/logstash/pipeline/lastvalue.txt" #是否使用数据库某一列的值, use_column_value => true tracking_column => "id" #numeric或者timestamp #tracking_column_type => "numeric" #如果为true则会清除last_run_metadata_path记录,即重新开始同步数据 clean_run => false # sql语句文件,对于复杂的查询,可以放在文件中,如: # statement_filepath => "jdbc.sql"这个文件路径要跟jdbc.sql对应上 #设置监听间隔。可以设置每隔多久监听一次什么的。 #官方举例: #* 5 * 1-3 * 一月到三月的每天凌晨5点每分钟执行一次。 #0 * * * * 将在每天每小时的第0分钟执行。 #0 6 * * * America/Chicago每天早上6:00(UTC / GMT -5)执行。 #* * * * * 分、时、天、月、年,全部为*默认含义为每分钟查询一次 schedule => "* * * * *" #索引类型 #type => "jdbc" statement => "SELECT * FROM testORDER BY id ASC" } } output { elasticsearch { hosts => "localhost:9200" index => "test" user => "elastic" password => "elastic" timeout => 3000 document_id => "%{id}" template => "/home/test/logstash/config/test.json" template_name => "test" } }
创建test.json文件,存放要同步数据的es模板
vim test.json
{ "index_patterns": ["test*"], "mappings": { "properties": { "id": { "type": "integer" }, "accession": { "type": "keyword" }, "name": { "type": "keyword" }, "comment_text": { "type": "text" }, "sequence": { "type": "text" }, "keyword": { "type": "keyword" } } } } '
创建pipelines.yml,亲测不创建会报错的
vim pipelines.yml
- pipeline.id: pipeline1 path.config: "/usr/share/logstash/config/jdbc.conf"
创建logstash.yml,亲测不创建会报错的,这个空着就行
touch logstash.yml
上面文件都创建好了,避免出现权限问题可以chmod 777 xxx。
接下来就启动logstash就可以了
二、启动容器
docker pull logstash
启动容器,将配置文件挂载到本地。注意这里使用-it启动,可以看到详细的启动日志
docker run -it -p 5044:5044 --privileged=true -v /home/test/logstash/config:/usr/share/logstash/config -v /home/test/logstash/pipeline:/usr/share/logstash/pipeline --name logstash logstash
由于配置文件中使用的是定时任务,配置内容schedule => "* * * * *",启动容器就会立刻同步数据,而且会一直反复同步。
这个定时任务仅用于测试~~,实际一定会详细配置时间的。
调试过程中遇到的问题:
logstash同步mysql数据到es(一、es模板问题,请求返回400)