使用docker安装部署ELK,完成mysql同步数据es(详细步骤)

1 篇文章 0 订阅
1 篇文章 0 订阅

使用docker安装部署ELK,完成mysql同步数据es(详细步骤)

       第一次安装使用elk,做个记录,本地windows版部署使用已跑通,现在就试了下linux的,选用docker进行部署,主要原因是使用安装包部署过于麻烦,docker部署简洁,用的版本是6.8.1。

       windows版elasticsearch+logstash参考:

https://blog.csdn.net/qq_15199097/article/details/91819540

https://blog.csdn.net/wzn1054162229/article/details/101480921

https://blog.csdn.net/fjyab/article/details/81101284

注:上方博客可能配置方式不同,请自行参照。其中配置logstash将数据库数据导入到Elasticsearch中时,如果运行不能连接,那么数据库连接JAR包请放到下方路径下:在这里插入图片描述

        pull下来的镜像,我都做了重命名(pull下来的镜像名字太长,以下不重复此步骤):

docker tag docker.elastic.co/elasticsearch/elasticsearch:6.8.1 elasticsearch:latest

  一、安装ElasticSearch

        1、准备Elasticsearch配置文件

            创建目录elk,在目录中创建elasticsearch文件夹。

            在elasticsearch/config文件夹,存放配置文件elasticsearch.yml,文件的内容如下:

network.host: 0.0.0.0
xpack:
  ml.enabled: false
  monitoring.enabled: false
  security.enabled: false
  watcher.enabled: false

      2、准备镜像

6.0之后官方开始自己维护镜像版本:https://www.docker.elastic.co/。找到需要的ELK镜像地址,pull下来就好了。pull命令:

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.1

使用docker images指令查看镜像:

        3、修改vm.max_map_count

        在elasticsearch的docker版本文档中,官方提到了vm.max_map_count的值在生产环境最少要设置成262144。设置的方式有两种:

1)在生产模式下配置vm.max_map_count参数(永久生效):

vi /etc/sysctl.conf
#修改或新增
vm.max_map_count = 262144
#立即生效
sysctl -p

 2)正在运行的机器:(一次生效)

sysctl -w vm.max_map_count=262144

         4、运行容器

        之后我们执行命令,暴露容器的9200,9300端口,方便我们在其它集器上可以通过类似head插件去做es索引的操作等,挂载出目录,读取宿主机上的配置文件。执行命令为:

 docker run -it -d -p 9200:9200 -p 9300:9300 -v "$PWD"/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name elasticsearch -e "discovery.type=single-node" elasticsearch:6.8.1

        如果你还需要存储历史数据,那么就需要将data目录保存到本地,使用-v,或者mount参数挂载本地一个目录。

        运行时如果报错内存不足,请参考:Docker 启动elasticsearch报内存不足解决

  二、安装Logstash

     1、准备配置文件

新建logstash文件夹,并在其下新建config、pipeline、jars、pipeLine、sql四个文件夹。

其中 其中config文件夹下有文件logstash.yml、pipelines.yml;

pipeline文件夹下放置文件logstash-mysql.conf;

jars文件夹下放置mysql驱动包,此处选用mysql-connector-java-5.1.7-bin.jar;

sql文件夹下放置mysql.sql文件

内容分别为:

logstash.yml:

config:
  reload:
    automatic: true
    interval: 3s
xpack:
  management.enabled: false
  monitoring.enabled: false

pipelines.yml:

- pipeline.id: mysql
  path.config: "/usr/share/logstash/pipeline/logstash-mysql.conf"

   注:此处配置的是logstash读取的config文件

logstash-mysql.conf:

input {
  jdbc {
      # mysql 数据库链接,test为数据库名
      jdbc_connection_string => "jdbc:mysql://192.168.100.105:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"
      jdbc_user => "root"
      jdbc_password => "root"

      # 驱动路径
      jdbc_driver_library => "/usr/share/logstash/jars/mysql-connector-java-5.1.30-bin.jar"

      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"

      #是否分页
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      
      record_last_run => true
      use_column_value => true
      tracking_column => "id"
      last_run_metadata_path => "/usr/local/src/logstash/last_run_record"


      #直接执行sql语句
      #statement =>"statement =>"select * from test where id >:sql_last_value""
      # 执行的sql 文件路径+名称
      statement_filepath => "/usr/share/logstash/sql/mysql.sql"

      #设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"

      # 索引类型
      #type => "jdbc"
    }

}

output {
  elasticsearch {
        #es的ip和端口
        hosts => ["192.168.100.105:9200"]
        #ES索引名称(自己定义的)
        index => "goodscat"
        #文档类型(自己定义的)
        document_type => "docs"
        #设置es中数据的id为数据库中的字段(一般设置为mysql中主键字段)
        document_id => "%{cid}"
    }
    stdout {
        codec => json_lines
    }

  多表同步logstash.config配置参考:Logstash多表同步MySQL数据到ES

 mysql.sql:(要同步到es的sql)

SELECT * FROM wp_ex_source_goods_tb_cat_copy

   2、准备镜像

   注:logstash需要跟es版本一致

docker pull docker.elastic.co/logstash/logstash:6.8.1

   3、运行

docker run -it --name logstash --link elasticsearch -d -v "$PWD"/config:/usr/share/logstash/config/ -v "$PWD"/jars/:/usr/share/logstash/jars/ -v "$PWD"/pipeline/:/usr/share/logstash/pipeline/ -v "$PWD"/sql/:/usr/share/logstash/sql/ logstash

        "$PWD" 为当前目录,此处为: /home/elk/logstash 目录中

在输入中:输入的日志文件使用/usr/share/logstash/pipeline/logs/test.log,只需将日志文件放入pipeline/logs/下,或者手动映射进容器即可。

 

 到此,即可将mysql同步数据到es中

 

  三、安装kibana

   1、准备配置文件

      新建kibana文件夹,并在其下新建config/kibana.yml文件,内容如下:

server.host: "0.0.0.0"
elasticsearch.url: http://192.168.100.105:9200
xpack:
  apm.ui.enabled: false
  graph.enabled: false
  ml.enabled: false
  monitoring.enabled: false
  reporting.enabled: false
  security.enabled: false
  grokdebugger.enabled: false
  searchprofiler.enabled: false

   2、准备kibana镜像

docker pull docker.elastic.co/kibana/kibana:6.8.1

   3、运行

         映射出端口5601,挂载出kibana配置文件,执行命令为:

docker run  -it -d -p 5601:5601 -v "$PWD"/config/kibana.yml:/usr/share/kibana/config/kibana.yml kibana

         kibana的作用主要是帮助我们将日志文件可视化。便于我们操作,统计等。它需要ES服务,所以我们将部署好的es和kibana关联起来,主要用到的参数是--link,使用link参数,会在kibana容器hosts文件中加入elasticsearch ip地址,这样我们就直接通过定义的name来访问es服务了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值