GVKun编程网logo

最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana(版本 7.14.0)(elk docker集群版)

8

对于想了解最新docker下整合ELKElasticSearch+filebeat+logstash+kibana的读者,本文将提供新的信息,我们将详细介绍版本7.14.0,并且为您提供关于Docke

对于想了解最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana的读者,本文将提供新的信息,我们将详细介绍版本 7.14.0,并且为您提供关于Docker 安装 ElasticSearch+Logstash+Kibana、Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统、Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)、Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)的有价值信息。

本文目录一览:

最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana(版本 7.14.0)(elk docker集群版)

最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana(版本 7.14.0)(elk docker集群版)

环境与前言

centos7.x docker 20.x elk+filebeat 统一是 7.14.0 本人大三,在一家小公司实习,最近公司里发版测试环境使用 docker, 觉得是时候学习一下 docker 了 于是学习了一下 docker 不得不说上手之后很香。推荐到菜鸟教程学习,连接:Docker 教程。学习完了部署了一下 elk,也是在实习的时候接触到的,elk 可以收集过滤分析日志,学习了一下。附上官网连接:ElasticSearch: 权威指南 Logstash 文档 Kibana 文档 Filebeat 文档 目前来说我只是单纯的使用,没有太过认真的去攻读这些文档,我只读了我用到的和一些配置的章节。以后有时间在慢慢学习下去吧,对这一块还算有点兴趣。

架构简介

简介与他们之间的联系

  • Elasticsearch : 是一个分布式、RESTful 风格的搜索数据分析引擎。
  • Logstash : 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据转换数据,然后将数据发送到您最喜欢的 “存储库” 中。
  • Kibana : 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
  • Filebeat : 无论是从安全设备、云、容器、主机还是 OT 进行数据收集Filebeat 都将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。

联系草图:

描述: 通过 filebeat 从文件控制台等日志源中收集日志,发送给 logstash,logstash 进行过滤存储到 elasticsearch,kibanaelasticsearch 中读取数据进行分析处理等。

个人认为日志这东西是非常重要的,开发过程中程序跑不完善的日志可以快速排查定位错误原因。线上就更不用说了,没有错误日志咋死的都不知道。用过 log4j 的都说好,本次实验就使用 log4j 将日志输出到文本中。然后通过 filebeat 收集日志,再通过 filebeat 输出到 logstash,logstash 有过滤的能力,在通过 logstash 输出到 elasticsearch 进行存储,在通过 Kibana 查看分析什么的。废话讲完下面开始操作。

镜像下载

说明也许多年后的你看到这篇文章这里的很多东西都已经过时了,但整个流程应该不会相差甚远,希望能帮你找到真个思路而不是 ctrl cv。

ElasticSearch

docker 中查找镜像 docker search [你想找地镜像]

docker search elasticearch

''控制台中搜索''

也可以去

Docker Hub

搜索:

''dockerhub中搜索''

点进去能看到版本号 我直接下载最新版 7.14.0

docker pull elasticearch:7.14.0

access denied for elasticearch, repository does not exist or may require ''docker login'': denied: requested access to the resource is denied 报这个错你就 docker login 登录 至于没有账号就去注册。下面的下载都是这样不在赘述。

filebeat

拉取镜像:

docker pull docker.elastic.co/beats/filebeat:7.14.0

logstash

拉取镜像:

docker pull logstash:7.14.0

kibana

拉取镜像:

docker pull kibana:7.14.0

下载完成运行命令看一眼

docker images

配置运行

顺序说明

说一下,按我的习惯是按照依赖的顺序来启动的。聪明的你想按照什么顺序都一样。

1 . Elasticsearch

启动

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d --net elk-net --name es elasticsearch:7.14.0

参数说明 : -p : 端口映射,将本机的 9200 映射到容器里的 9200 端口,访问 localhost:9200 就会访问到容器的 9200. -e 环境变量 意思是将 elasticsearch 设置成单机运行 -d : 后台运行,--net :设置网络属于 elk-net (你要是没有的话去简历或者不填这个配置)--name 设置容器的名字,不然的话默认一大串字母每次看日志还要 ps 一下多恶心你说是吧。

查看启动情况

两种方式:

  1. docker ps -a

STATUS 顾名思义状态,是 UP 就 ok,不是的话使用第二种方式看启动日志看看报的什么错然后去百度怎么解决。

  1. docker logs -f es

当然可以直接访问机器 ip:9200 查看有没有跑起来。

到此为止用来存储的 Elasticsearch 启动完成丢在一边就完事了。值得一提的是,写这篇文章的时候,作者仅仅在摸鱼时(实习除了 crud 还是想弄一弄其他东西的,嘎嘎嘎)刚搭建完成最基本的 elk,能跑,有许多配置包括安全什么的作者都没有去配置,这仅仅只是一篇没有营养的搭建教程。

2 . Kibana

编辑配置文件

在本地新建一个 kibana 的配置文件对应 kibana 中的 /config/kibana.yml

// 递归创建文件夹
mkdir -p /home/docker/elk/kibana
// 创建编辑配置文件
vi /home/docker/elk/kibana/kibana.yml

这是 kibana.yml 内容:

server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://你的ip:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

朋友,记得把‘’你的 ip‘’换成你的机器 ip

启动

docker run -v /home/docker/elk/kibana:/config -p 5601:5601 -d --net elk-net --name kibana kibana:7.14.0

参数解释: :-v : 挂载本地的文件夹到容器中 config 文件夹 -p : 端口映射 -d : 后台运行 --net :将容器加入指定网络 --name : 给容器起个名字。

查看启动效果

  1. docker ps -a
  2. docker logs -f kibana
  3. 浏览器访问 http:// 你的 ip:5601 如果一切顺利你将看到如下画面:

小提示:也许你在按照上面步骤 ctrl cv 之后并没有达到预期的效果,这是很正常的,生活总会事与愿违,你可能会看到页面一行没有准备好的英文,你在 logs 看到日志里有 error 告诉你 elasticsearch 节点信息查询不到等等等等。直接百度。作者也做过很多尝试,给你看看 history,最后在 es 节点自测没有问题的情况下,我给你提供一个最终的解决方案。进入容器,直接修改容器里的配置文件,保存退出后重启容器,命令如下:进入容器:bash docker exec -it kibana /bin/bash 打开 /config/kibana.yml 配置文件:bash vi /config/kibana.yml 如果你打开看到 elasticsearch.hosts: [ "elasticsearch:9200" ] 那说明问题就出现在这,这是默认的,你只需要把 elasticsearch 改成你自己的地址,保存退出:wq 输入 exit 退出容器,输入 docker restart kibana 重启容器即可。

至此 elasticsearch 和 kibana 启动完成。至于在 kibana 中操作查看 es 的内容自行百度,或者直接看官网也是可以的。 下面是 filebeatlogstash 的启动:

3 . Logstash

配置文件

// 创建配置文件的文件夹
mkdir -p /home/docker/elk/logstash/
// 创建并编辑配置文件
vim /home/docker/elk/logstash/logstash.yml
vim /home/docker/elk/logstash/logstash.conf

logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: elasticsearch机器的ip:9200

logstash.conf

input {
  beats {
    port => 4567
  }
}
filter {
  #Only matched data are send to output.
}
output {
  elasticsearch {
    hosts  => ["http://elasticsearch机器ip:9200"]   #ElasticSearch host, can be array.
    index  => "logapp-%{+YYYY.MM}"         #The index to write data to.
  }
}

启动

docker run -d -p 4567:4567 --net elk-net --name logstash -p 5044:5044 -p 5045:5045 -v /home/docker/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /home/docker/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.14.0

小提示:配置文件中分为三个模块,input,filter,output 很好理解,就是把东西通过 input 输入,通过 filter 过滤,通过 output 输出。其中 input 中的 beats 插件就是我们下面要启动的 filebeatfilebeat 通过 4567 端口将收集的日志发送给 logstash, 当然想用哪个端口随便你。 启动完别忘了看看有没有启动成功,docker ps ...,docker logs ....

4 . Filebeat

配置文件

新建需要收集的日志文件:

mkdir -p /var/log/logapp
vim /var/log/logapp/app.info.log

然后在里面随便写点东西,我就写了一个 test, 真实环境中我们往往会收集 nginx,java 应用等的日志文件,这里我们就直接新建模拟一下了。

mkdir -p /home/docker/elk/filebeat/
vim /home/docker/elk/filebeat/filebeat.yml

filebeat.yml

filebeat.inputs:
- type: log
  paths:
    - /var/log/logapp/app.info.log
output.logstash:
    hosts: ["logstash的ip:4567"]

注意:这里把你的 ip 换上去,这就是前面 logstash 配置文件 input1beats 监听的端口。 这里的缩进什么的都别丢了,严格按照 yaml 格式,不然就会报错。input 中就是要收集的东西,我们收集一个刚刚我们新建的日志,paths 里填上刚刚新建的日志文件的地址。

启动

docker run -u root -v /var/log/logapp:/var/log/logapp:rw -v /home/docker/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -e setup.kibana.host=你的kibana机器的ip:5601 -d --name filebeat --net elk-net docker.elastic.co/beats/filebeat:7.14.0

注意:记得把 ip 换成你的 kibana 的 ip。 到此全部正常的话就算是整合完成了。让我们打开 kibana 操作一波看一下效果。

查看效果

浏览器输入 http://kibana 的 ip:5601 进入 kibana:

选择管理:

选择索引配置:

创建:

输入之前配置文件中写的 logapp 下一步:

选择时间戳创建:

点击侧边栏,选择 Discover:

选择刚刚创建的 pattern:

这一条数据就是创建文件是写的 test:

这时去 echo 写入一条 hello elk 回到 kibana 查看:

搜索一下:

好了,至此 elk 的基础搭建就完成了。至少是跑起来了,至于想要实现些什么,就去配置文件里配置就行。

Docker 安装 ElasticSearch+Logstash+Kibana

Docker 安装 ElasticSearch+Logstash+Kibana

为啥装这套东西?

原因:Logstash收集系统日志,将日志以json的形式发送给ElasticSearch存储,用Kibana客户端打开来查看日志信息。

 

不用Docker大概弄个半天以上,现在10分钟搞定。

1、下载镜像文件

docker pull elasticsearch:5.6.11

docker pull kibana:5.6.11

docker pull logstash:5.6.15

  

2、创建实例

ElasticSearch

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

  

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-xms256m -Xmx256m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11

  

特别注意:

-e ES_JAVA_OPTS="-xms256m -Xmx256m" \ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES

 

Kibana

docker run --name kibana -e ELASTICSEARCH_URL=http://192.168.31.128:9200 -p 5601:5601 \
-d kibana:5.6.11

  

Logstash

mkdir -p /mydata/logstash
vim /mydata/logstash/logstash.conf

  

1)、在mydata/logstash中创建logstash.conf文件:文件内容如下

input {
    tcp {
        port => 4560
        codec => json_lines
    }
}
output{
  elasticsearch { 
	hosts => ["192.168.31.128:9200"] 
	index => "applog"
	}
  stdout { codec => rubydebug }
}

  

2)启动

docker run -d -p 4560:4560 \
-v /mydata/logstash/logstash.conf:/etc/logstash.conf \
--link elasticsearch:elasticsearch \
--name logstash logstash:5.6.15 \
logstash -f /etc/logstash.conf

  

3)检查是否有logstash-codec-json_lines插件,如果没有侧安装

安装插件:

https://github.com/logstash-plugins

docker exec –it logstash /bin/bash 

cd /usr/share/logstash/bin 

查看插件

logstash-plugin list

安装插件

logstash-plugin install logstash-codec-json_lines

  

Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统

Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统

一、系统的基本架构

  在以前的博客中有介绍过在物理机上搭建 ELK 日志分析系统,有兴趣的朋友可以看一看 -------------->> 链接戳我 <<。这篇博客将介绍如何使用 Docker 来更方便快捷的搭建,架构图如下:

 

  说明:WEB 服务器代表收集日志的对象,由 Filebeat 收集日志后发送给 Logstash2,再由 Logstash2 发送至 Redis 消息队列,然后由 Redis 发送至 Logstash1,最后由 ElasticSearch 收集处理并由 Kibana 进行可视化显示。这里之所以需要两层 Logstash 是因为 WEB 服务器可以是任何服务器,可能会出现多个不同日志需要分析。这个架构可以用在较大规模的集群中,在生产中可以将各个功能单点进行扩展,例如将 Redis 和 Logstash 集群化。

二、Docker 搭建 ES 集群

  默认系统已安装好 docker,创建 ES 集群 docker 挂载目录,编辑配置文件:

~]# mkdir -pv /root/elk/{logs,data,conf}
vim /root/elk/conf/elasticsearch.yml
cluster.name: es5.6-cluster #集群识别名,在一个集群中必须同名
node.name: node1 #节点标识
network.host: 192.168.29.115 #节点IP
http.port: 9200 #监听端口
discovery.zen.ping.unicast.hosts: ["192.168.29.115", "192.168.29.116"] #集群节点
http.cors.enabled: true
http.cors.allow-origin: "*"
~]# docker container run --name es5.6 \
--network host  \
-v /root/elk/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /root/elk/data/:/usr/share/elasticsearch/data/ \
-v /root/elk/logs/:/usr/share/elasticsearch/logs/  \
-p 9200:9200 \
-p 9300:9300 \
-d --rm docker.io/elasticsearch:5.6

  安装 ElasticSearch-head,查看 ES 集群是否安装成功:

~]# docker container run --name es-head -p 9100:9100 -d --rm mobz/elasticsearchhead:5

三、Docker 安装 Filebeat

  编辑 Filebeat 配置文件,把配置文件、log 挂载至 docker 卷,,定义要送至 Logstash 的 log 文件与输出目标:

vim /root/filebeat/conf/filebeat.yml
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/messages
  exclude_lines: ["^DBG"]
  document_type: system-log-0019
- input_type: log
  paths:
    - /var/log/nginx/access.log
  document_type: nginx-log-0019 #相对的是logstash中的type,可以在Logstash中做if判断
output.logstash:
  hosts: ["192.168.29.119:5044","192.168.29.119:5045"]
  enabled: true
  worker: 1
  compression_level: 3
  loadbalance: true
~]# docker container run --name filebeat --network host \
-v /root/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /var/log/messages:/var/log/messages \
-v /var/log/nginx/access.log:/var/log/nginx/access.log  \
--rm -d docker.elastic.co/beats/filebeat:5.6.15 \
filebeat  -c /usr/share/filebeat/filebeat.yml

四、Docker 安装 Logstash

docker container run --name logstash \
-p 9600:9600  \
-v /var/log/nginx/access.log:/var/log/nginx/access.log \
-v /var/log/messages:/var/log/messages  \
-v /root/logstash/pipeline/stdout.conf:/etc/logstash/conf.d/stdout.conf \
-d  --network host -it --rm docker.io/logstash:5.6  \
-f /etc/logstash/conf.d/stdout.conf

  Logstash 收集多个日志并输出示例(与此架构无关,只是示范示例):

vim /root/logstash/pipeline/stdout.conf
input {
        file {
        type => "nginxaccesslog"
        path => "/var/log/nginx/access.log"
        start_position => "beginning"
        }
        file {
        type => "syslog"
        path => "/var/log/messages"
        start_position => "beginning"
        }
}
output {
        if [type] == "nginxaccesslog" {
        elasticsearch {
        hosts => ["192.168.29.115:9200"]
        index => "nginx-log-0018-%{+YYYY.MM.dd}"
        }
                                }
        if [type] == "syslog" {
        elasticsearch {
        hosts => ["192.168.29.115:9200"]
        index => "syslog-0018-%{+YYYY.MM.dd}"
        }
                        }
}

   配置 Logstash2 上的输入输出配置:

  这里先进行测试,用 Filebeat 收集 WEB 服务器上的 /var/log/messages 与 /var/log/nginx/access.log 日志并进行标准输出,配置如下:

vim /root/logstash/conf/stdout.conf
input {
        beats {
        port => 5044
        codec => "json"
        }
        beats {
        port => 5045
        codec => "json"
        }
}
output {
        stdout {
        codec => "rubydebug"
        }
}

  启动 Logstash2 并查看是否可读取日志并输出:

docker container run --name logstash \
-p 9600:9600  \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it  \
--network host \ --rm docker.io/logstash:5.6 \ -f /etc/logstash/conf.d/stdout.conf

  如截图所示便是正常:

 

  可以看到 /var/log/messages 与 /var/log/nginx/access.log 都能正常收集并输出。

五、Docker 安装 Redis

  修改配置:

vim /root/redis/conf/redis.conf
bind 0.0.0.0
port 6379
requirepass 123456 #配置密码
save ""
pidfile /var/run/redis/redis.pid
logfile /var/log/redis/redis.log #注意权限

  运行:

~]# docker container run --name redis \
-v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /root/redis/log/redis.log:/var/log/redis/redis.log \
-v /root/redis/run/redis.pid:/var/run/redis/redis.pid \
-v /root/redis/data/:/data/  \
-p 6379:6379  --network host -d  \
docker.io/redis:4 redis-server /usr/local/etc/redis/redis.conf

六、Docker 启动并配置 Logstash2 收集多日志并送至 Redis

vim /root/logstash/conf/stdout.conf
input {
    beats {
    port => 5044
    codec => "json"
    }
    beats {
        port => 5045
        codec => "json"
        }
}
output {
    if [type] == "system-log-0019" {
    redis {
        data_type => "list"
        host => "192.168.29.117"
        port => "6379"
        key => "system-log-0019"
        db => "4"
        password => "123456"
            }
    }
    if [type] == "nginx-log-0019" {
    redis {
                data_type => "list"
                host => "192.168.29.117"
                port => "6379"
                key => "nginx-log-0019"
                db => "4"
                password => "123456"
                        }
        }
}

  再次启动 Logstash2:

~]# docker container run --name logstash \
-p 9600:9600  \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it  \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf

  链接 Redis 查看日志是否已被收集

~]# redis-cli -h 192.168.29.117
192.168.29.117:6379> AUTH 123456
OK
192.168.29.117:6379> SELECT 4 #选择数据库号
OK
192.168.29.117:6379[4]> KEYS *
1) "nginx-log-0019" #可以看到日志已写入成功,这里是前面在Logstash中定义的key
2) "system-log-0019"
192.168.29.117:6379[4]> LLEN system-log-0019
(integer) 6400
192.168.29.117:6379[4]> LLEN nginx-log-0019
(integer) 313

  也可以在 Redis 上查看是否连接:

~]# lsof -n -i:6379
COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 14230 polkitd    6u  IPv4 106595      0t0  TCP *:6379 (LISTEN)
redis-ser 14230 polkitd    7u  IPv4 118204      0t0  TCP 192.168.29.117:6379->192.168.29.104:40320 (ESTABLISHED)
redis-ser 14230 polkitd   10u  IPv4 109238      0t0  TCP 127.0.0.1:6379->127.0.0.1:52460 (ESTABLISHED)
redis-cli 17066    root    3u  IPv4 117806      0t0  TCP 127.0.0.1:52460->127.0.0.1:6379 (ESTABLISHED)

  以上步骤 log 文件走向:WEB→Filebeat→Logstash2→Redis。下面再来配置 Redis→Logstash1→ES→Kibana。

七、docker 配置 Logstash1

vim /root/logstash/conf/stdout.conf
input {
    redis {
        data_type => "list"
        host => "192.168.29.117"
        port => "6379"
        key => "system-log-0019"
        db => "4"
        password => "123456"
            }
    redis {
                data_type => "list"
                host => "192.168.29.117"
                port => "6379"
                key => "nginx-log-0019"
                db => "4"
                password => "123456"
        codec => "json"
                        }
}
output {
    if [type] == "system-log-0019" { #用if判断来选择ES节点
    elasticsearch {
        hosts => ["192.168.29.115:9200"] #节点可以自定义
        index => "system-log-0019-%{+YYYY.MM.dd}"
            }
    }
    if [type] == "nginx-log-0019" {
        elasticsearch {
                hosts => ["192.168.29.115:9200"]
                index => "nginx-log-0019-%{+YYYY.MM.dd}"
                        }
        }
}

  启动 Logstash1 并挂载配置:

~]# docker container run --name logstash \
-p 9600:9600  \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it  \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf

  查看 Redis 中的数据是否已被 ES 取走:

192.168.29.117:6379[4]> LLEN nginx-log-0019
(integer) 0
192.168.29.117:6379[4]> LLEN system-log-0019
(integer) 0

  以上 Redis 显示说明数据已被 ES 取走。

八、docker 启动并配置 Kibana

  配置 Kibana:

vim /etc/kibana/kibana.yml
server.host: "127.0.0.1"
elasticsearch.url: "http://192.168.29.115:9200"

  启动 Kibana:

~]# docker container run --name kibana \
-v /etc/kibana/kibana.yml:/etc/kibana/kibana.yml \
--network host \
-p 5601:5601 \
-d --rm kibana:5.6

  为安全起见,这里建议用 Nginx 加密返代 Kibana 进行访问。

  最后在 Kibana 中添加 index 就能访问并搜索采集的日志了:

原文出处:https://www.cnblogs.com/readygood/p/10512342.html

Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)

Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)

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.8.0

# 下载镜像 查看镜像
docker pull elasticsearch:7.8.0
docker images

# 创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
docker network create my-network 

# 运行 elasticsearch
docker run -d --name elasticsearch --net my-network  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0

# 查看容器状态
docker ps

# 检测 elasticsearch 是否启动成功
curl 127.0.0.1:9200

{
"name": "fa352b46a6b9",
"cluster_name": "docker-cluster",
"cluster_uuid": "48E5S_HZS2yLNiZojbQD6w",
"version": {
"number": "7.8.0",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date": "2020-06-14T19:35:50.234439Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You KNow, for Search"
}
{
name: "fa352b46a6b9",
cluster_name: "docker-cluster",
cluster_uuid: "48E5S_HZS2yLNiZojbQD6w",
version: {
number: "7.8.0",
build_flavor: "default",
build_type: "docker",
build_hash: "757314695644ea9a1dc2fecd26d1a43856725e65",
build_date: "2020-06-14T19:35:50.234439Z",
build_snapshot: false,
lucene_version: "8.5.1",
minimum_wire_compatibility_version: "6.8.0",
minimum_index_compatibility_version: "6.0.0-beta1"
},
tagline: "You KNow, for Search"
}

Elasticsearch 安装启动完成

二、Docker 安装 Logstash

官网镜像地址:https://hub.docker.com/_/logstash

使用同版本镜像 7.8.0

# 下载镜像 查看镜像
docker pull logstash:7.8.0
docker images

我在工作目录建立一个 docker 目录 并在里面创建了 logstash 目录,用来存放所有配置

创建目录 /root/docker-root/logstash/config/

创建文件 /root/docker-root/logstash/config/logstash.yml

logstash.yml 文件内容

path.config: /root/docker-root/logstash/conf.d/*.conf
path.logs: /root/docker-root/logstash/logs

创建文件 /root/docker-root/logstash/conf.d/test.conf

conf.d/test.conf (文件内容)

input {
    beats {
        port => 5044
        codec => "json"
    }
}

output {
  elasticsearch { hosts => ["192.168.0.160:9200"] }
  stdout { codec => rubydebug }
}

#########################
input {
    beats {
    port => 5044
    codec => "json"
}
}

output {
  elasticsearch { hosts => ["elasticsearch:9200"] }
  stdout { codec => rubydebug }
}

启动 Logstash

docker run -d --restart=always --log-driver json-file --log-opt max-size=10m --log-opt max-file=2 -p 5044:5044 --name logstash -v /root/docker-root/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/docker-root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.8.0

三、Docker 安装 Kibana

官网镜像地址:https://hub.docker.com/_/kibana

使用和 elasticsearch 相同版本镜像 7.8.0 (不一样可能会出现问题)

# 下载镜像 查看镜像
docker pull kibana:7.8.0
docker images

##创建容器
docker run -d --name kibana --net my-network -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.0.160:9200  kibana:7.8.0

Kibana 安装启动完成

四、Docker 安装 Filebeat

官网镜像地址:https://hub.docker.com/_/filebeat

使用同版本镜像 7.8.0

# 下载镜像 查看镜像
docker pull store/elastic/filebeat:7.8.0
docker images
# 下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml

# 打开配置文件
vim filebeat.docker.yml

img

# 增加下面的配置 (收集 .log 数据 把数据发送到当前网络5044端口 (logstash 端口) )
# 这个地方的 .log 要保证有几条测试数据
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/Nginx/*.log

output.logstash:
  hosts: ['{ip}:5044']
 
# 运行Filebeat

# 请更改下面两个路径
{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
 

现在去 Kibana 查看数据,已经有数据了

Kibana 报错解决办法

在浏览器中输入 http://192.168.0.160:5601/ 页面报错 Kibana server is not ready yet

启动后报错

Kibana server is not ready yet

打印日志,报错:

#打印日志命令
[root@localhost ~]# docker logs kibana
{"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"Unable to revive connection: http://172.17.0.2:9200/"}
{"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"No living connections"}

进入kibana容器中

docker exec -it kibana /bin/bash
bash-4.2$ ping 172.17.0.2    #没有问题,能ping通
...
bash-4.2$ curl http://120.79.43.44:9200
curl: (7) Failed connect to 120.79.43.44:9200; No route to host

问题就出在这里!容器之间无法进行通信,猜测是防火墙的问题,再单独搜索这个问题,找到了解决的方案

解决办法如下:

#配置docker0服务到受信任连接
[root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
#停止NetworkManager(检测网络、自动连接网络的程序)服务
[root@localhost ~]# systemctl stop NetworkManager.service
#修改docker网络接口为内部区域(永久)
[root@localhost ~]# firewall-cmd --permanent --zone=trusted --change-interface=docker0
success
#启动NetworkManager(检测网络、自动连接网络的程序)服务
[root@localhost ~]# systemctl start NetworkManager.service
#配置docker0服务到受信任连接
[root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
#重启docker服务
[root@localhost ~]# systemctl restart docker.service

参考:

https://www.cnblogs.com/fbtop/p/11005469.html
https://www.cnblogs.com/hackyo/p/9951684.html
https://www.cnblogs.com/linjiqin/p/12103645.html

Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)

Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)

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

# 创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
docker network create somenetwork

# 运行
elasticsearch
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.1.1

# 查看容器状态
docker ps

# 检测 elasticsearch 是否启动成功
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

# 运行 Kibana
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.1.1

# 查看容器启动状态
docker ps

 

访问 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 的配置文件

 

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 ps

启动成功

 

四、Docker 安装 Filebeat

官网镜像地址:https://hub.docker.com/_/filebeat

使用同版本镜像 7.1.1 

# 下载镜像 查看镜像
docker pull store/elastic/filebeat:7.1.1
docker images

# 下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml

# 打开配置文件
vim
filebeat.docker.yml


# 增加下面的配置 (收集 .log 数据 把数据发送到当前网络5044端口 (logstash 端口) )
# 这个地方的 .log 要保证有几条测试数据

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log

output.logstash:
hosts: [''{ip}:5044'']
 

# 运行Filebeat

# 请更改下面两个路径
{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

 

 

 

启动成功 

现在去 Kibana 查看数据,已经有数据了 

 

(大家不要拿来命令就执行啊,中间有些路径之类的要自己改改。)

到此 最基本的几个软件通讯配置 结束了。 还有很多要探索的地方。 待续...

 

 

我们今天的关于最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana版本 7.14.0的分享已经告一段落,感谢您的关注,如果您想了解更多关于Docker 安装 ElasticSearch+Logstash+Kibana、Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统、Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)、Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)的相关信息,请在本站查询。

本文标签: