ELK是由 Elasticsearch、Logstash和Kibana 三部分组件组成。
Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
Filebeat 是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到 Logstash 或 Elasticsearch。
Docker 镜像统一从 https://hub.docker.com/ 下载 (安装时请使用统一版本)
一、Docker 安装 Elasticsearch
官网镜像地址:https://hub.docker.com/_/elasticsearch
找到目前最新的(Tags)是 7.1.1
docker pull elasticsearch:7.1.1
docker images
复制代码
docker network create somenetwork
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” elasticsearch:7.1.1
docker ps
复制代码
curl 127.0.0.1:9200
Elasticsearch 安装启动完成
二、Docker 安装 Kibana
官网镜像地址:https://hub.docker.com/_/kibana
使用和 elasticsearch 相同版本镜像 7.1.1 (不一样可能会出现问题)
docker pull kibana:7.1.1
docker images
注意:在本例中,Kibana使用默认配置,并希望连接到正在运行的Elasticsearch实例http://localhost:9200
复制代码
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.1.1
访问 http://127.0.0.1:5601 (启动可能会较慢,如失败等几秒再尝试刷新一下)
Kibana 安装启动完成
三、Docker 安装 Logstash
官网镜像地址:https://hub.docker.com/_/logstash
使用同版本镜像 7.1.1
docker pull logstash:7.1.1
docker images
我在工作目录建立一个 docker 目录 并在里面创建了 logstash 目录,用来存放所有配置
logstash.yml (文件内容)
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
复制代码
conf.d/test.conf (文件内容)
input {
beats {
port => 5044
codec => “json”
}
}
output {
elasticsearch { hosts => [“elasticsearch:9200”] }
stdout { codec => rubydebug }
}
复制代码
复制代码
复制代码
启动 Logstash
记得映射上面两个目录 {path}
docker run -it -d -p 5044:5044 --name logstash --net somenetwork -v {path}/logstash.yml:/usr/share/logstash/config/logstash.yml -v {path}/conf.d/:/usr/share/logstash/conf.d/ logstash:7.1.1
启动成功
四、Docker 安装 Filebeat
官网镜像地址:https://hub.docker.com/_/filebeat
使用同版本镜像 7.1.1
docker pull store/elastic/filebeat:7.1.1
docker images
复制代码
复制代码
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml
vim filebeat.docker.yml
filebeat.inputs:
output.logstash:
hosts: [’{ip}:5044’]
{nginx-path} = 本地的日志文件目录(映射到容器中 作为数据源)
{path} = Filebeat配置文件路径
{ip} = elasticsearch 地址
docker run --name filebeat --user=root -d --net somenetwork --volume="{nginx-path}:/var/log/nginx/" --volume="{path}/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" store/elastic/filebeat:7.1.1
复制代码
复制代码
docker ps
启动成功