docker搭建ELK,使用logstash增量同步mysql数据到es

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/supercmd/article/details/91048042

docker搭建elasticsearch

  1. 拉取镜像:
    docker pull elasticsearch:版本号
  2. 启动:
    docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch 镜像名
  3. 浏览器访问http://localhost:9200 查看是否成功

 

docker搭建kibana

  1. 构建镜像
    docker pull kibana:版本号

     

  2. 启动:
    docker run --name kibana -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 -d 镜像名

     

  3. 浏览器访问http://localhost:5601/查看是否成功

 

 

docker搭建logstash

  1. 构建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"]
  2. 构建镜像:
    docker build -t my-logstash .
  3. 创建logstash.conf
    注意:目录:/opt/kibana/config 需要有mysql-connector-java-6.0.6.jar
    input {
     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}"
        }
    }

     

  4. 在目录 /opt/kibana/config/   创建  station_parameter.txt 用于记录上次同步位置
  5. 启动:
    docker run --name logstash -d -it -v /opt/kibana/config:/opt/kibana/config my-logstash

     

  6. 若控制台有显示mysql相应表的数据,则同步成功

至此,使用docker搭建ELK、es增量同步MySQL成功,以上亲测可用!

 

方案二:使用docker-compose搭建

  1. 构建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

     

  2. 启动
     

    docker-compose up -d


    注意:方案二未经过严格亲测,仅提供参考

展开阅读全文

没有更多推荐了,返回首页