Docker下logstash同步mysql和elasticsearch
1 配置elasticsearch环境
2 搭建logstash环境
elasticsearch和logstash版本要一致拉取镜像
1
docker pull logstash:5.6.8
创建容器,同时映射文件夹,这样可以把文件同步到容器内
将/home/docker/logstash/文件夹映射到/etc/logstash/pipeline目录下
1
docker run -dit --name logstash -v /home/docker/logstash/:/etc/logstash/pipeline logstash:5.6.8
安装jdbc和elasticsearch插件
通过
docker exec -it logstash /bin/bash命令进入容器内,然后在下载插件进入bin目录,执行以下命令
1
2
3
4#下载jdbc插件
logstash-plugin install logstash-input-jdbc
#下载elasticsearch插件
logstash-plugin install logstash-output-elasticsearch下载mysql-connector-java的jar包,放在刚刚配置的映射/home/docker/logstash/文件夹中,同时在这个文件夹下创建mysql.conf配置文件,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35input {
jdbc {
# mysql jdbc connection string to our backup databse 后面的test对应mysql中的test数据库
jdbc_connection_string =>"jdbc:mysql://8.140.127.197:3306/tensquare_article?characterEncoding=UTF8"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
#这个jar包的地址是容器内的地址
jdbc_driver_library => "/etc/logstash/pipeline/mysql-connector-java-5.1.47.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#以下对应着要执行的sql的绝对路径。
statement => "select id,title,content from tb_article"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
}
}
output {
elasticsearch {
#ESIP地址与端口
hosts => "8.140.127.197:9200"
#ES索引名称(自己定义的)
index => "tensquare"
#自增ID编号
document_id => "%{id}"
document_type => "article"
}
stdout {
#以JSON格式输出
codec => json_lines
}
}执行,进行同步
1
logstash -f /etc/logstash/pipeline/mysql.conf
报错问题
参考:https://blog.csdn.net/weixin_41676972/article/details/87773783