ELK是一个开源的数据分析平台,由三个开源项目Elasticsearch、Logstash和Kibana组成,因此被称为ELK Stack。ELK Stack主要用于处理和分析大量的日志数据,支持实时搜索、数据可视化和分析。其中,Elasticsearch是一个分布式搜索引擎和分析引擎,能够实现实时搜索和分析大规模的数据集。Logstash是一个数据收集、处理和转换工具,能够从不同来源收集、处理和传输数据。Kibana是一个数据可视化工具,能够通过仪表盘、图形和地图等方式展示数据。ELK Stack的三个组件相互配合,能够构建一个强大的、可扩展的日志分析平台,支持数据的快速检索、可视化和分析。
Elasticsearch是一个基于Lucene库的分布式搜索引擎和数据分析引擎,能够实现实时搜索和分析大规模的数据集,支持文本、数字、地理位置等多种类型的数据检索和分析。Elasticsearch是一个开源的、高度可扩展的平台,能够处理海量的数据,并支持分布式的数据存储和处理。Elasticsearch的主要特点包括:
分布式搜索引擎:Elasticsearch能够对海量的数据进行快速的搜索和查询,并支持实时搜索。
分布式数据存储:Elasticsearch能够将数据分散存储在多个节点上,以提高数据的可用性和可靠性。
多数据类型支持:Elasticsearch支持多种数据类型,包括文本、数字、日期、地理位置等。
实时数据分析:Elasticsearch能够对数据进行实时的聚合、过滤和分析,并支持数据可视化。
可扩展性:Elasticsearch能够扩展到数百个节点,处理PB级别的数据。
开源:Elasticsearch是一个开源的软件,源代码可以公开获取和修改。 Elasticsearch广泛应用于企业搜索、日志分析、安全分析和商业智能等领域。它提供了丰富的API和工具,包括RESTful API、Java API和Python API等,方便开发人员集成和使用。
Logstash是一个开源的数据收集、处理和转换工具,能够从不同来源收集、处理和传输数据。,主要用于处理和分析大量的日志数据,支持多种数据源和格式,包括文本文件、数据库、日志文件、消息队列等。Logstash能够实现以下功能:
数据收集:Logstash能够从不同的数据源收集数据,并支持多种数据格式,包括JSON、CSV、XML等。
数据处理:Logstash能够对收集到的数据进行处理和转换,例如过滤、分析、标准化等。
数据传输:Logstash能够将处理后的数据传输到目标位置,例如Elasticsearch、Kafka、Redis等。
插件扩展:Logstash提供了丰富的插件,方便用户扩展和定制功能。
实时数据处理:Logstash能够实现实时数据处理,支持流式数据处理。 Logstash是一个高度可扩展的工具,能够处理大量的数据,并支持分布式部署。它能够与Elasticsearch、Kibana、Beats等工具集成,构建一个强大的、可扩展的数据分析平台。Logstash提供了丰富的文档和社区支持,方便用户学习和使用。
Kibana是一个数据可视化工具,能够通过仪表盘、图形和地图等方式展示数据。主要用于展示和分析从Elasticsearch中获取的数据。Kibana能够实现以下功能:
数据可视化:Kibana能够通过仪表盘、图形和地图等方式展示数据,支持多种数据类型和格式。
数据查询:Kibana能够实现对Elasticsearch中存储的数据进行查询和搜索。
仪表盘管理:Kibana能够创建、管理和共享仪表盘,方便用户展示和分享数据。
可视化插件:Kibana提供了丰富的可视化插件,方便用户扩展和定制功能。
数据分析:Kibana能够实现对数据进行聚合、过滤和分析,支持实时数据处理。 Kibana的主要优点包括易用性、可扩展性和丰富的功能。它能够与Elasticsearch、Logstash、Beats等工具集成,构建一个强大的、可扩展的数据分析平台。Kibana提供了丰富的文档和社区支持,方便用户学习和使用。
1.下载es镜像
docker pull elasticsearch:7.12.1
2.运行es并导出es配置文件
# 创建一个docker 网络环境,名为elk
docker network create elk
# 运行es容器
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
# 宿主机创建es目录
mkdir es
chmod 666 es
# 进入es目录
cd es
# 查看当前目录
/root/work/es
# 将es容器中的配置文件复制到es目录中
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /root/work/es/elasticsearch.yml
# 在es目录中创建data目录
mkdir data
# 准备工作已完成,删除临时创建的es容器
docker rm -f es
3.运行es
# 运行新的容器
docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v $PWD/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data/:/usr/share/elasticsearch/data \
elasticsearch:7.12.1
4.验证es是否运行成功
[root@localhost es]# curl 127.0.0.1:9200
{
"name" : "57df77848d46",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "mYN2JAk_RGqn58QcPho3Pw",
"version" : {
"number" : "7.12.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7",
"build_date" : "2021-04-20T20:56:39.040728659Z",
"build_snapshot" : false,
"lucene_version" : "8.8.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
1.下载kibana镜像
docekr search kibana
docker pull kibana:7.12.1
# 启动 kibana 容器并连接同一网络
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1
2.复制kibana配置文件
cd /root/work
mkdir kibana
docker cp kibana:/usr/share/kibana/config/kibana.yml kibana/
chmod 666 kibana/kibana.yml
3.修改配置文件
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.2.6:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 开启 kibana 的汉化
i18n.locale: zh-CN
4.重新启动容器
docker rm -f kibana
docker run -d --name kibana \
-p 5601:5601 \
-v $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--net elk \
kibana:7.12.1
5.访问kibana
通过ip:5601 可访问kibana,如图
1.拉取镜像并复制配置文件
docker pull logstash:7.12.1
docker run -d -P --name logstash --net elk logstash:7.12.1
mkdir logstash
# 拷贝数据
docker cp logstash:/usr/share/logstash/config logstash/
docker cp logstash:/usr/share/logstash/data logstash/
docker cp logstash:/usr/share/logstash/pipeline logstash/
#文件夹赋权
chmod -R 777 logstash/
2.修改logstash相关配置文件
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.2.6:9200" ]
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.2.6:9200"] # ElasticSearch 的地址和端口
index => "elk" # 指定索引名
codec => "json"
}
stdout {
codec => rubydebug
}
}
3.重新启动容器
#注意先删除之前的容器
docker rm -f logstash
# 启动容器并挂载
docker run -d --name logstash --net elk \
--privileged=true \
-p 5044:5044 -p 9600:9600 \
-v $PWD/logstash/data/:/usr/share/logstash/data \
-v $PWD/logstash/config/:/usr/share/logstash/config \
-v $PWD/logstash/pipeline/:/usr/share/logstash/pipeline \
logstash:7.12.1
4.查看日志
docker logs -f logstash