基于docker部署的微服务架构:ELK+KAFKA的部署

背景
ELK由Elasticsearch、Logstash和Kibana三部分组件组成;

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  • Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

  • kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

执行原理图
在这里插入图片描述

zookeeper和kafka安装部署

  • 安装

    docker pull zookeeper:latest
    docker pull wurstmeister/kafka:latest
    
  • 启动

    docker run -d --name zookeeper --publish 2181:2181 \
    --volume /etc/localtime:/etc/localtime \
    zookeeper:latest
    
    docker run -d --name kafka --publish 9092:9092 \
    --link zookeeper \
    --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
    --env KAFKA_ADVERTISED_HOST_NAME=kafka所在宿主机的IP \
    --env KAFKA_ADVERTISED_PORT=9092 \
    --volume /etc/localtime:/etc/localtime \
    wurstmeister/kafka:latest
    
  • 测试
    创建topic

    bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic elk_kafka 
    

    运行消息生产者,指定创建的topic

    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic elk_kafka 
    

    运行消费者,指定同样的topic

    bin/kafka-console-consumer.sh --zookeeper zookeeper:2181 --topic elk_kafka--from-beginning  
    

    若能查看到数据表示kafka搭建成功

elk安装
官网:https://elk-docker.readthedocs.io/https://hub.docker.com/r/sebp/elk/

  • 安装前提条件:
    Docker至少得分配3GB的内存;
    Elasticsearch至少需要单独2G的内存;
    vm.max_map_count至少需要262144;

    vm.max_map_count的永久修改方法:

    1.执行vim /etc/sysctl.conf,文件中加入:
    	vm.max_map_count=262144
    2.执行sysctl -p命令查看
    
  • 安装ELK

    docker pull sebp/elk 
    目前安装的是最新版本 ELK 6.6.1.
    
  • 启动

    docker run -p 5601:5601 -p 9200:9200 -p 9300:9300 -p 5044:5044 -e ES_MIN_MEM=128m  -e ES_MAX_MEM=2048m -d -it --name elk sebp/elk 
    
  • 配置
    进入elk容器中

    docker exec -it <container-name> /bin/bash 
    

    进入容器后执行

    若报错请执行service logstash stop命令,停止logstash服务,在执行以下命令
    /opt/logstash/bin/logstash --path.data /tmp/logstash/data \
        -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost"] } }'
    

    当命令成功被执行后,看到:Successfully started Logstash API endpoint {:port=>9600} 信息后,输入:this is a dummy entry 然后回车,模拟一条日志进行测试

    打开浏览器,输入:http://宿主机ip:9200/_search?pretty ,就会看到我们刚刚输入的日志内容

    Ctrl+C退出后,进入/etc/logstash/conf.d 文件夹地址中创建文件 logstash.conf 添加一下内容

    	input {
    	      kafka {
    	        bootstrap_servers => ["192.168.111.12:9092"]
    			auto_offset_reset => "latest"
    	        consumer_threads => 5
    	        decorate_events => true
    	        group_id => "elk"
    	        topics => ["elk_kafka"]
    			type => "bhy"
    	      }
        }
        output {
          stdout {}
          elasticsearch {
          	hosts => ["192.168.111.12:9200"]
      		index => "first-elk-%{+YYYY.MM.dd}"
          }
        }
    

    执行vim /etc/init.d/logstash,修改如下

     LS_USER=root    //原来默认为logstash
     LS_GROUP=root  //原为默认为logstash
    

    启动logstash

    service logstash start
    

到此,logstash已经连接上Kafka并且实时监控消息发送到es存储,接下来我们使用Springboot发送消息到kafka,代码省略,地址:invocate

参考:https://blog.csdn.net/yhq1913/article/details/86523014

猜你喜欢

转载自blog.csdn.net/qq_26869339/article/details/88765319