目录
相关问题汇总:
logstash同步mysql数据到es(一、es模板问题,请求返回400)
logstash同步mysql数据到es(三、es模板问题)-CSDN博客
使用docker实现logstash同步mysql到es-CSDN博客
ES同步工具简介
Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,它提供了丰富的功能来存储、搜索和分析大量的数据。在实际应用中,我们经常需要将数据从其他数据源同步到Elasticsearch中。以下是几种常见的工具和方法用于实现ES数据同步:
-
Logstash:Logstash是一个开源的数据收集、处理和转发工具,它可以从不同的数据源中抽取数据,并将其转换为JSON格式,然后发送到Elasticsearch进行索引。Logstash支持各种输入插件和输出插件,可以与多个数据源进行集成,如关系型数据库、消息队列、日志文件等。
-
Filebeat:Filebeat是一个轻量级的日志数据采集工具,它可以监视指定的日志文件或目录,并将日志数据发送到Elasticsearch进行索引。Filebeat适用于处理大量的日志数据,并具有低资源占用和高效的传输性能。它支持各种日志格式和协议,如JSON、Grok、Syslog等。
-
JDBC插件:Elasticsearch提供了JDBC插件,它可以通过JDBC连接到关系型数据库,并将数据导入到Elasticsearch进行索引。通过配置JDBC连接字符串、SQL查询语句和索引映射,可以将数据库中的数据同步到Elasticsearch中。这种方法适用于需要定期同步数据库数据的场景。
-
Elasticsearch Hadoop:Elasticsearch Hadoop是一个开源的工具集,它提供了将数据从Hadoop生态系统(如HDFS、Hive、Spark等)导入到Elasticsearch的功能。通过Elasticsearch Hadoop,可以将大数据处理结果直接导入到Elasticsearch进行索引和搜索。
-
自定义开发:如果以上工具无法满足需求,还可以通过自定义开发来实现ES数据同步。可以使用各种编程语言(如Java、Python等)编写程序,调用Elasticsearch的API来实现数据的抽取、转换和加载。
准备工作
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 => "* * * * *",启动容器就会立刻同步数据,而且会一直反复同步。
这个定时任务仅用于测试~~,实际一定会详细配置时间的。