由于在国内拉去镜像速度都比较慢,或者根本拉不下来,发现一个好的镜像好用镜像网址,可以在上面查找自己想要的镜像
https://hub.daocloud.io/repos?type=featured
进入正题,配置我们环境,有以下几个步骤:
一、搭建elasticsearch的环境
- 从镜像仓库拉去elasticsearch,选择自己想要版本
docker pull daocloud.io/library/elasticsearch:6.5.3
- 启动elasticsearch镜像
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" daocloud.io/library/elasticsearch:6.5.3
若主机内存比较小,es是启动不成功的,elasticsearch/jvm.options 默认配置 -Xms2g - Xmx2g 来指定内存,然后更改启动语句
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" daocloud.io/library/elasticsearch:6.5.3
- 查看es是否能安装成功,可通过postman工具查看,访问127.0.0.1:9200
二、搭建mysql环境
- 从镜像仓库拉去mysql,选择自己想要版本
docker pull daocloud.io/library/mysql:5.7.4
- 启动mysql镜像,"MYSQL_ROOT_PASSWORD"这个属性设置root的密码,自行更改
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD="root" -d daocloud.io/mysql:5.7.4
- 打开root访问权限,不然无法访问mysql
#利用该语句进入mysql容器 docker exec -it mysql bash #然后连接mysql mysql -uroot -proot #然后执行root权限的开放语句 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
然后利用mysq连接工具访问ok,就说明配置成功
三、搭建logstash环境
- 拉去logstash镜像,注意一定要es的版本一致
docker pull daocloud.io/library/logstash:6.5.3
- 启动logstash镜像,同时映射文件夹,这样就可以把文件同步到镜像内
将/Users/work/docker/logstash/文件映射到容器的/etc/logstash/pipeline/目录下
docker run -d --name logstash1 -v /Users/work/docker/logstash/:/etc/logstash/pipeline/ daocloud.io/library/logstash:6.5.3
- 安装 jdbc 和 elasticsearch 插件
通过 docker exec -it logstash1 /bin/bash 命令进入容器内,然后在下载插件
/opt/logstash-6.5.4# bin/logstash-plugin install logstash-input-jdbc
Validating logstash-input-jdbc
Installing logstash-input-jdbc
Installation successful
/opt/logstash-6.5.4# bin/logstash-plugin install logstash-output-elasticsearch
Validating logstash-output-elasticsearch
Installing logstash-output-elasticsearch
Installation successful
- 下载mysql-connector-java的jar包,放在刚刚配置的映射/Users/work/docker/logstash/文件夹中
- 编写logstash的配置文件logstash.config,也放在刚刚配置的映射/Users/work/docker/logstash/文件夹中,具体配置项的含义查看官方文档
input {
stdin { }
jdbc {
#注意mysql连接地址一定要用ip,不能使用localhost等
jdbc_connection_string => "jdbc:mysql://192.168.1.103:3307/test"
jdbc_user => "root"
jdbc_password => "123456"
#这个jar包的地址是容器内的地址
jdbc_driver_library => "/etc/logstash/pipeline/mysql-connector-java-5.1.47.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement => "SELECT * FROM test"
schedule => "* * * * *"
}
}
output {
stdout {
codec => json_lines
}
elasticsearch {
#注意mysql连接地址一定要用ip,不能使用localhost等
hosts => "192.168.1.103:9200"
index => "test"
document_type => "_doc"
document_id => "%{id}"
}
}
- 更改设置,不然后连接es会报错,记得更改配置都在容器内操作;
#进入config文件
cd config
#更改logstash.yml文件
vi logstash.yml
改成es的地址,但不能用127.0.0.1或localhost
- 更改logstash启动配置
#进入config文件
cd config
#更改pipelines.yml文件
vi pipelines.yml
具体修改为,注意这个是容器内的地址配置文件的地址路径
- pipeline.id: table1
path.config: "/etc/logstash/pipeline/logstash.conf"
若想配置多个同步文件同样的道理
- 然后推出容器,重启logstash即可
docker start logstash1
#具体的日志查看方式
docker logs -f --tail=30 logstash1
致此,所有配置都完成,我们查看一下是否同步成功