准备工作:
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"#启用分页,默认falsejdbc_paging_enabled => "true"#页面大小jdbc_page_size => "500"#是否记录上次运行的结果record_last_run => true#记录上次运行结果的文件位置last_run_metadata_path => "/usr/share/logstash/pipeline/lastvalue.txt"#是否使用数据库某一列的值,use_column_value => truetracking_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 => 3000document_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: pipeline1path.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)
logstash同步mysql数据到es(二、jdbc_driver_library问题)
logstash同步mysql数据到es(三、es模板问题)