最近配置这个东西挺折磨的,决定把过程记录下来,方便将来。
部分过程参考自:https://blog.csdn.net/chongshi4396/article/details/100805225
首先要把镜像pull下来,版本号要与ElasticSearch的版本一致。参考:我的ElasticSearch版本是7.12.1。
docker pull logstash:7.12.1
先创建并启动一个容器。
设置环境变量:-e LS_JAVA_OPTS="-Xms512m -Xmx512m"
由于默认内存是1g,这里修改为512m,防止内存不足,内存充足的无需添加此参数。
docker run -it -p 5044:5044 -p 9600:9600 -d --name logstash_7.12.1 -e LS_JAVA_OPTS="-Xms512m -Xmx512m" --privileged=true logstash:7.12.1
容器启动成功后
将容器内的我们需要挂载的两个目录复制出来
docker cp logstash_7.12.1:/usr/share/logstash/config/ /usr/docker/logstash/config/
docker cp logstash_7.12.1:/usr/share/logstash/pipeline/ /usr/docker/logstash/pipeline/
效果如下:
接着我们就可以把这个容器删除了,下面开始创建我们真正要运行的容器。
docker rm logstash_7.12.1
创建容器并运行
docker run -it -p 5044:5044 -p 9600:9600 -d --name logstash_7.12.1 -e LS_JAVA_OPTS="-Xms512m -Xmx512m" -v /usr/docker/logstash/config/:/usr/share/logstash/config/ -v /usr/docker/logstash/pipeline/:/usr/share/logstash/pipeline/ --privileged=true logstash:7.12.1
进入容器内
docker exec -it logstash_7.12.1 /bin/bash
在容器内为Mysql与ES的连接安装插件
bin/logstash-plugin install logstash-input-jdbc
bin/logstash-plugin install logstash-output-elasticsearch
安装有点慢,请忍一下()。
同时,我们还要为mysql的连接配置驱动,驱动要下载对应的版本。
这里我下载好驱动后,将其放在了**/usr/docker/logstash/pipeline**下(非容器内的目录)。路径如下。
同时对映射目录**/usr/docker/logstash/config/**下的相关文件进行修改
修改后如下所示
pipeline.yml
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/logstash.conf"
logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://121.971.68.29:9200" ]
xpack.monitoring.enabled: true
以及/usr/docker/logstash/pipeline下的
logstash.conf
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:mysql://112.139.47.563:3306/test?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
jdbc_user => "root"
jdbc_password => "root"
jdbc_driver_library => "/usr/share/logstash/pipeline/mysql-connector-java-8.0.16.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
codec => plain { charset => "UTF-8"}
tracking_column => update_time
last_run_metadata_path => "/usr/share/logstash/pipeline/logstash_jdbc_last_run"
jdbc_default_timezone => "Asia/Shanghai" #设置时区
statement=>"select * from topic where update_time > :sql_last_value"
clean_run => false
schedule => "* * * * *" #默认每1分钟更新一次数据
}
}
output {
elasticsearch {
hosts => "112.93.28.19:9200"
index => "topic"
#document_type => "_doc"
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
此时,还缺少一个文件logstash_jdbc_last_run,
我们直接在pipeline目录下创建它,
logstash_jdbc_last_run
--- !ruby/object:DateTime '2019-01-07 02:40:00.317455000 Z'
~
并解放它的权限,防止容器没有访问它的权限而不断轮询。
chmod 777 logstash_jdbc_last_run
一切工作准备就绪,退出容器
重新启动容器,让配置生效
docker restart logstash_7.12.1
查看日志
docker logs -f logstash_7.12.1
成功把mysql的增量数据插入到es。
END