Docker快速搭建ELK日志分析平台

时间:2022-10-13 17:55:51

一、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快速搭建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

Docker快速搭建ELK日志分析平台

验证 curl http://localhost:9200

Kibana 安装:

docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.1.1

Docker快速搭建ELK日志分析平台

验证 浏览器访问 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里。

Docker快速搭建ELK日志分析平台

在kibana中查看: 

Docker快速搭建ELK日志分析平台

至此ELK搭建完成。