背景
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
-
测试
创建topicbin/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
-
测试
访问ES地址 http://ip:9200/_search?pretty 若有资料表示logstash文件配置无误,如图
访问kibana地址 http://ip:5601