Docker 搭建 ELK + filebeat

参考:https://www.linuxprobe.com/docker-deploy-elk-filebeat.html

https://blog.csdn.net/abc8125/article/details/106858862

 

安装环境

  1. centos7
  2. docker version 1.13.1

 

组件介绍

  • ElasticSearch

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。

  • Logstash

Logstash 是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集与解析,并将其存入 ElasticSearch中。

  • Kibana

Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。

  • Filebeat

引入Filebeat作为日志搜集器,主要是为了解决Logstash开销大的问题。相比Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计

 

1. 下载官方镜像

$ docker pull elasticsearch:6.8.13
$ docker pull logstash:6.8.13
$ docker pull kibana:6.8.13

讲一下踩的坑:

之前没指定镜像版本时,默认pull的是latest的版本。我以为这个版本应该是最新的。进入到kibana的容器,执行 kibana --version的时候发现版本是5.4*系列。连进入kibana后第一次创建索引都找不到地方。后果断到dockerHub官方看一下elk的版本。发现官方提供的更高版本的镜像是6.8.13,7.10.1两个版本。那我就换个高版本的6.8.13镜像。

 

dockerhub官方给出的logstash、elasticsearch、kibana3者镜像版本完全一致。

Docker 搭建 ELK + filebeat_第1张图片

 

2. 架构

不引入Filebeat

Docker 搭建 ELK + filebeat_第2张图片

引入Filebeat

Docker 搭建 ELK + filebeat_第3张图片

 

3. 部署

请注意:使用虚拟机请注意关闭&&禁用防火墙。如果使用的厂商云主机,请开放安全组规则(即对应服务端口的访问权限)。

 

3.1 启动ElasticSearch

$ docker network create somenetwork    #创建network网络

$ docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch --net somenetwork -e "discovery.type=single-node" elasticsearch:6.8.13

 

3.2 启动Logstash

新建配置文件 logstash.conf,input 描述了日志读取方式,读取位置。

input {
    beats {
        port => 5044
    }
}

output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        #填写实际情况elasticsearch的访问IP,因为是跨容器间的访问,使用内网、公网IP,不要填写127.0.0.1|localhost
        hosts => ["{$ELASTIC_IP}:9200"]
    }
}

启动Logstash,端口5044

$ docker run -d --expose 5044 -p 5044:5044 -p 9600:9600 --name logstash --net somenetwork -v $PWD:/config-dir logstash:6.8.13 -f /config-dir/logstash.conf

 

3.3 安装Filebeat

下载Filebeat安装包

$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-linux-x86_64.tar.gz

解压

$ tar -xvf filebeat-5.2.2-linux-x86_64.tar.gz && cd filebeat-5.2.2-linux-x86_64

进入安装目录,修改配置文件:filebeat.yml,读取本机Nginx日志文件

Docker 搭建 ELK + filebeat_第4张图片

Docker 搭建 ELK + filebeat_第5张图片

在安装目录下启动filebeat

$ nohup ./filebeat -e -c filebeat.yml >> catalina.log &    #以后台方式启动filebeat,将日志输出在catalina.log文件

 

3.4 启动Kibana

$ docker run -d -p 5601:5601 --name kibana --net somenetwork -e ELASTICSEARCH_URL=http://{$ELASTIC_IP}:9200 kibana:6.8.13    #注意替换es访问地址,跨容器间的访问,请不要使用127.0.0.1|localhost

 

4. 测试

 

4.1 访问Elasticsearch

Docker 搭建 ELK + filebeat_第6张图片

 

4.2 浏览器访问Kibana,端口5601

先提前访问几次Nginx,保证 filebeat 要收集的日志文件里有数据。

Docker 搭建 ELK + filebeat_第7张图片

第一次访问需要先配置索引。被 filebeat 收集的日志到达 elasticsearch 之前没有定义索引。所以elasticsearch给定义的索引前缀,都是logstash开头。我们用 logstash* 直接就能匹配成功了。

Docker 搭建 ELK + filebeat_第8张图片

Docker 搭建 ELK + filebeat_第9张图片

 

查询日志。我们通过 logstash 传给 es 的日志数据,如无索引默认使用logstash前缀的索引。但实际情况生产环境中。我们收集日志的索引,包括在Kibana里定义的索引,前缀都应该是项目名开头。

Docker 搭建 ELK + filebeat_第10张图片

 

我再故意访问一个错误地址,Refresh刷新,大概也就两秒的时间。Kibana就已经相应到了。消息几乎是实时同步。

Docker 搭建 ELK + filebeat_第11张图片

Docker 搭建 ELK + filebeat_第12张图片

 

你可能感兴趣的:(杂文,elk)