• 从头开始搭建分布式日志平台的docker环境


     

    上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平台,是在windows平台下操作的,这篇主要是将这些软件环境全部在linux+docker折腾一遍。
     


      我们的目的是需要在docker中安装像resis,elk这些软件环境,由于我是windows平台,搜索一把找到了boot2docker,但在安装时提示需要用dockermachine来安装,dockermachine与Oracle VM VirtualBox配合来完成,在创建一个docker时会自动创建一个linux虚似机。经过对比,我最终决定按传统的方式来做,在linux系统中去安装docker.虚似机我选择了VMware Workstation Pro,操作系统选择最新的ubantu,,安装好之后,还需要做很多操作,比如:磁盘映射,窗口大小分辨率,粘贴复制的支持等等这些方便使用虚似机的设置。

      有了虚似机,就可以开始搞docker了,安装docker环境这个操作比较简单,我们只需要按照这个链接(Installation on Ubuntu)中的操作一步一步就可以了,虽然有些操作命令你不一定熟悉,但也不需要过份紧张,我们只求安装成功,有兴趣的可细研究每条命令的用途。文章中需要根据自己安装的ubuntu版本来执行相应的命令,新版本反而更加简单些,安装成功了也附加了测试方式。我们执行下docer version,如果看到如下图所示说明已经安装成功。

      安装软件,安装软件一种是直接去下载压缩包,解压来安装,这种自控能力比较强,但相对麻烦,这里我们可以选择已经做好的image文件方式来安装,所有的image都可以在hub.docker中查找到,其中包含了详细的操作步骤,下面主要分享在安装过程中遇到的一些问题。

      在执行时,如果发现有些命令不清楚,第一个方法是去官网上查,第二个就是利用-h或者--help在命令中查看。
     

    •   redis
    docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf


         我按上面的命令写出了下面的版本:
        

    docker run -dit --name redis  --hostname  redis-host  -v /data:/data -p 6379:6379 redis redis-server /data/redis.conf
    


         上面的指令导致docker执行异常,问题出在配置文件的指定上,修改了加载配置文件的路径,改成下面的可正常运行,不知道是否是配置文件的路径不支持随意修改的原因,下面的命令没有指定redis-server以及配置文件,初步看来默认会加载配置文件,有待后续验证。
        

    docker run -dit --name redis  --hostname  redis-host  -v /data:/data -v /data/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 redis
      • -p是端口映射,docker内部的端口映射到host的端口,比如安装了多个resis时,这个端口映射就必备设置,否则会出现host上的端口被占用的情况。
      • --name,这个是为了方便根据docker的名称来操作docker,否则只能根据生成的ID来操作,不直观,比如我们可以 docker start redis来启动。

                   

      • --hostname,这个是进入docker后的一个显示名称,比如执行docker exec -it redis bash后出现的名称

                   

      • -v是磁盘路径映射,docker与host主机之间的路径关系
      • -d是机后台方式运行,其它的i与t可以查文档
      • 如果不指定image的版本,它会自动寻找最新的版本来安装。
    •   logstash
    docker run -dit --name logstash  --hostname  logstash-host -v /data:/data logstash logstash -f /data/logstash.conf

         logstash的安装没有出现redis的一波三折,配置文件的路径可直接指定,问题出在配置文件的配置上,下面是运转正常的配置

    input {
    
        redis {
            data_type => "list"
            key => "logstash"
            host => "192.168.21.128"
            port => 6379
            threads => 5
            codec => "json"
        }
    }
    filter {
    
    }
    output {
     elasticsearch {
            hosts => ["192.168.21.128"]
        }
    
        stdout{}
    }
    


        之前的windows版本有介绍配置,但在docker下配置有所不同,直接将windows版的配置文件拿过来,出现了logstash无法将redis中的日志输出到elastcsearch中,输出配置如下:

    output {
       
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "logstash-%{type}-%{+YYYY.MM.dd}"
            document_type => "%{type}"
            workers => 1
            flush_size => 20
            idle_flush_time => 1
            template_overwrite => true
        }
        stdout{}
    }
    

        这里从两方面分析:
        input:确认logback是否将日志持久化到redis,可使用key *来查看是否有我们专门为日志配置的logstash这个key,然后使用llen logstash来测试日志有没有随程序的执行而增加,确认的结果是可以查到logstash这个key,而且长度随程序的执行而增加,那现在的问题就在 于logstash并没有将redis中的日志取走去执行并输出到elasticsearch中,将output中的elasticsearch的配置删 除,只保留stdout,结果发现logstash可以正常的取走日志。

       output: input的排查说明问题出在output,然后采取最少配置方法,只配置最重要的属性,按文档中配置hosts再运行,结果程序运转正常。
        我们按照https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html文章中说的来配置,注意hosts属性,之前配置的某些属性可能有问题,这里采取优先级最少配置法来排查问题。

    •   elasticsearch
    docker run -dit --name elasticsearch  --hostname  elasticsearch-host  -v /data:/data -p 9200:9200 -p 9300:9300 elasticsearch:latest


          elasticsearch的安装比较奇怪,按上面的命令安装后,在客户端访问http9200端口,提示拒绝访问,端口显示为tcp,后经过无数次安装,无意中一次安装成功了,正常的映射了端口,目前详细的问题还没有找到,等后续有机会再研究。我们看docker ps后显示的结果,目前正常的情况下那个端口显示为如下图,之前出现问题时端口显示不是:0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp而是9200/tcp, 9300/tcp。

        

    •   kibana
    docker run -dit --name kibana  --hostname  kibana-host  -v /data:/data -p 5601:5601 -e ELASTICSEARCH_URL=http://192.168.21.128:9200  kibana:latest


         kibana的执行命令也是遇到配置文件指定的问题,后来将属性直接放在命令上了,这也是后续需要解决的问题。

       

        上面四项都成功安装后,我们的日志就可以成功的采集到elasticsearch中了。
        
     
        上面的docker在启动后,并不具备自启功能,做也是可以做到的。如果没有做成自启功能,我们也不能一个命令一个命令去重新启动,这里有一个命令可以一次性全部启动docker,非常实用。

      

    docker start `docker -ps -a -q`
  • 相关阅读:
    toString
    React系列,jsx
    React系列,初识
    如何在数据库中存储一棵树
    Linux-gate.so技术细节
    主引导记录MBR/硬盘分区表DPT/主分区、扩展分区和逻辑分区/电脑启动过程
    8259A工作原理描述
    汇编指令大全
    汇编条件判断整理(JCC,CMP/TEST的实现)
    【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep
  • 原文地址:https://www.cnblogs.com/ASPNET2008/p/5604479.html
Copyright © 2020-2023  润新知