docker搭建elasticsearch
- 拉取镜像:
docker pull elasticsearch:版本号
- 启动:
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch 镜像名
- 浏览器访问http://localhost:9200 查看是否成功
docker搭建kibana
- 构建镜像
docker pull kibana:版本号
- 启动:
docker run --name kibana -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 -d 镜像名
-
浏览器访问http://localhost:5601/查看是否成功
docker搭建logstash
- 构建dockerfile:
FROM logstash #安装input插件 RUN logstash-plugin install logstash-input-jdbc #安装output插件 RUN logstash-plugin install logstash-output-elasticsearch #容器启动时执行的命令.(CMD 能够被 docker run 后面跟的命令行参数替换) CMD ["-f", "/opt/kibana/config/logstash.conf"]
- 构建镜像:
docker build -t my-logstash .
- 创建logstash.conf
注意:目录:/opt/kibana/config 需要有mysql-connector-java-6.0.6.jarinput { stdin { } jdbc { #注意mysql连接地址一定要用ip,不能使用localhost等 jdbc_connection_string => "jdbc:mysql://10.11.0.100/uckefu?serverTimezone=UTC" jdbc_user => "xxx" jdbc_password => "xxx" #这个jar包的地址是容器内的地址 jdbc_driver_library => "/opt/kibana/config/mysql-connector-java-6.0.6.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" statement => "SELECT * FROM uk_chat_message where createtime> :sql_last_value order by createtime asc" schedule => "*/15 * * * *" #处理中文乱码问题 codec => plain { charset => "UTF-8"} #是否记录上次运行的结果 record_last_run => true #记录上次运行结果的文件位置 last_run_metadata_path => "/opt/kibana/config/station_parameter.txt" #是否使用数据库某一列的值, use_column_value => true tracking_column => "createtime" #numeric或者timestamp tracking_column_type => timestamp #如果为true则会清除 last_run_metadata_path 的记录,即重新开始同步数据 #clean_run => false } } filter { ruby { code => "event.timestamp.time.localtime" } } output { stdout { codec => json_lines } elasticsearch { #注意mysql连接地址一定要用ip,不能使用localhost等 hosts => "10.11.1.50:9200" index => "uckefu" document_type => "message" document_id => "%{id}" } }
- 在目录 /opt/kibana/config/ 创建 station_parameter.txt 用于记录上次同步位置
- 启动:
docker run --name logstash -d -it -v /opt/kibana/config:/opt/kibana/config my-logstash
- 若控制台有显示mysql相应表的数据,则同步成功
至此,使用docker搭建ELK、es增量同步MySQL成功,以上亲测可用!
方案二:使用docker-compose搭建
- 构建docker-compose.yml:
version: '2' services: elasticsearch: image: elasticsearch environment: - cluster.name=elasticsearch ports: - "9200:9200" kibana: image: kibana environment: SERVER_NAME: kibana ELASTICSEARCH_URL: http://elasticsearch:9200 ports: - "5601:5601" logstash: #image: logstash build: .#若使用build,需要结合上诉dockerfile使用 volumes: - /opt/kibana/config: /opt/kibana/config ports: - "4560:4560" links: - elasticsearch
-
启动
docker-compose up -d
注意:方案二未经过严格亲测,仅提供参考