一、ELK简介
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。
像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的*数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
二、Docker快速搭建ELK日志分析平台
下面简单介绍一下docker下如何搭建elk平台
我们的架构图:
创建docker网络:
docker network create somenetwork
拉取需要的镜像:
docker pull zookeeper:latest # zk
docker pull wurstmeister/kafka:latest # kafka
docker pull elasticsearch:7.1.1 # es
docker pull logstash:7.1.1 # logstash
docker pull kibana:7.1.1 #kibana
创建zk + kafka:
# zookeeper
docker run -d --name zookeeper \
--publish 2181:2181 zookeeper:latest
# kafka
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 \
--net somenetwork
wurstmeister/kafka:latest
# 测试
docker exec -it kafka /bin/bash
# 进入bin目录
cd /opt/kafka_2.25-2.3.0/bin/
# 创建topic
./kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic elk-kafka-test
# 运行生产者并指定topic
./kafka-console-producer.sh --broker-list 127.0.01:9092 --topic elk-kafka-test
# 新开窗口运行消费者,指定同样的topic, 注意替换kafkaIp
./kafka-console-consumer.sh --bootstrap-server kafkaIp:9092 --topic elk-kafka-test --from-beginning
Elasticsearch 安装:
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.1.1
验证 curl http://localhost:9200
Kibana 安装:
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.1.1
验证 浏览器访问 http://localhost:5601
Logstash 安装:
本地目录中直接建立配置,映射进容器。
vim logstash.conf
input {
kafka {
bootstrap_servers => ["kafka:9092"]
auto_offset_reset => "latest"
consumer_threads => 5
decorate_events => true
group_id => "elk"
topics => ["elk_kafka_test"]
type => "bhy"
codec => json {
charset => "UTF-8"
}
}
}
output {
stdout {}
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "test-elk-%{+YYYY.MM.dd}"
}
}
docker run -it -d -p 5044:5044 --name logstash \
--net somenetwork --link kafka --link elasticsearch \
-v /opt/logstash/pipelne:/usr/share/pipeline logstash:7.1.1
FileBeat配置监听:
编辑filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/log/*.log
fields:
docType: sys-log
output.kafka:
hosts: ["kafkaIp:9092"]
topic: "elk_kafka_test"
# 启动
./filebeat -c filebeat.yml -e
在/data/log/目录下变更日志文件,filebeat监听到变化,将日志在kafka中生产待logstash进行消费,在logstash容器内可以看到日志转换成json格式的数据存储到ES里。
在kibana中查看:
至此ELK搭建完成。