Docker搭建ELK Stack企业日志平台

ELK Stack企业日志平台介绍

ELK是由 Elasticsearch(搜索引擎)、Logstash(日志收集)和Kibana(可视化平台) 三部分组件组成。
本文中还引入了filebeat工具,相对于logstash,filebeat的资源占用率更低。

ELK Stack企业日志平台安装部署

本文采用的ELk镜像为 https://hub.docker.com/ 提供的官方镜像,也有很多非官方的集成好的elk镜像,部署方式大同小异,大家可以自行研究。部署时尽量采用相同版本的镜像,已避免不必要的报错。

一、Docker 安装 Elasticsearch

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

docker pull elasticsearch:7.1.1
[root@k8s-node3 ~]# docker images | grep elasticsearch
elasticsearch                        7.1.1               b0e9f9f047e6        6 months ago        894MB

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

docker network create elk

#查看docker网络

[root@k8s-node3 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
87080f2eb5a4        bridge              bridge              local
6835f763c78c        elk                 bridge              local
31359fc68c80        host                host                local
3890144a8de2        none                null                local

#运行 elasticsearch

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

#如果提示docker WARNING: IPv4 forwarding is disabled.
解决方法:
#在宿主机上面执行:

echo “net.ipv4.ip_forward=1” >> /usr/lib/sysctl.d/00-system.conf

#重启docker服务

systemctl restart docker

查看容器状态

[root@k8s-node3 ~]# docker ps | grep elasticsearch
ab49020cb285        elasticsearch:7.1.1   "/usr/local/bin/dock…"   20 hours ago        Up 19 hours         0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

#检测 elasticsearch 是否启动成功

[root@k8s-node3 ~]# curl 127.0.0.1:9200
{
  "name" : "ab49020cb285",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "iATljVk3S7SDk1tp7p8HPg",
  "version" : {
    "number" : "7.1.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "7a013de",
    "build_date" : "2019-05-23T14:04:00.380842Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Elasticsearch 安装启动完成

二、Docker 安装 Kibana

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

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

下载镜像 查看镜像

docker pull kibana:7.1.1
[root@k8s-node3 ~]# docker images | grep kibana
kibana                               7.1.1               67f17df6ca3e        6 months ago        746MB

注意:在本例中,Kibana使用默认配置,并希望连接到正在运行的Elasticsearch实例http://localhost:9200

运行 Kibana

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

查看容器启动状态

[root@k8s-node3 ~]# docker ps | grep kibana
c25a6db6d517        kibana:7.1.1          "/usr/local/bin/kiba…"   20 hours ago        Up 20 hours         0.0.0.0:5601->5601/tcp                           kibana

访问 http://ip:5601 (启动可能会较慢,如失败等几秒再尝试刷新一下)

 

Kibana 安装启动完成

三、Docker 安装 Logstash

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

使用同版本镜像 7.1.1

下载镜像 查看镜像

docker pull logstash:7.1.1
[root@k8s-node3 ~]# docker images | grep logstash
logstash                             7.1.1               b0cb1543380d        6 months ago        847MB

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

[root@k8s-node3 logstash]# pwd
/root/logstash
[root@k8s-node3 logstash]# ls
conf.d  logstash.yml

logstash.yml (文件内容)

[root@k8s-node3 logstash]# cat logstash.yml 
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash

下面是我用来测试的收集日志的配置文件

[root@k8s-node3 conf.d]# pwd
/root/logstash/conf.d
[root@k8s-node3 conf.d]# ls
test.conf
[root@k8s-node3 conf.d]# cat test.conf 
input {
   file {
        path => ["/usr/share/logstash/log/test.info.log"]
        type => "test-info"
        start_position => "beginning"
   }
   file {
        path => ["/usr/share/logstash/log/test.error.log"]
        type => "test-error"
        start_position => "beginning"
   }
}
filter {
    date {
       match => ["timestamp","yyyy-MM-dd HH:mm:ss"]
       remove_field => "timestamp"
    }
}
output {
    if [type] == "test-info" {
         elasticsearch {
            hosts  => ["elasticsearch:9200"]
            index  => "certification-info-%{+YYYY.MM.dd}"
         }
    }
    if [type] == "test-error" {
         elasticsearch {
            hosts  => ["elasticsearch:9200"]
            index  => "certification-error-%{+YYYY.MM.dd}"
         }
    }
}

启动 Logstash

记得映射上面两个目录 {path}

docker run -it -d -p 5044:5044 --name logstash --net elk -v /root/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.1.1

查看容器运行状态 

[root@k8s-node3 conf.d]# docker ps | grep logstash
fbc97c3ec892        logstash:7.1.1        "/usr/local/bin/dock…"   20 hours ago        Up 17 hours         0.0.0.0:5044->5044/tcp, 9600/tcp                 logstash

启动成功

此时,登录kibana平台,可以看到收集的数据

ps:这个收集的日志,是我进入到/usr/share/logstash/log/目录下创建的test.info.log和test.erro.log。若要收集宿主机的某个日志,只要启动容器时将宿主机上的日志路径映射到/usr/share/logstash/log/目录即可。/usr/share/logstash/log/目录并非固定,而是根据/root/logstash/conf.d/*.conf的配置文件内容而定。

四、Docker 安装 Filebeat

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

使用同版本镜像 7.1.1

下载镜像 查看镜像

docker pull store/elastic/filebeat:7.1.1
[root@k8s-node3 conf.d]# docker images |grep filebeat
store/elastic/filebeat               7.1.1               0bd69a03e199        6 months ago        288MB

下载默认官方配置文件 (暂时在当前目录创建一个 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 要保证有几条测试的内容

[root@k8s-node3 ~]# cat filebeat.docker.yml 
#filebeat.config:
#modules:
#path: ${path.config}/modules.d/*.yml
#reload.enabled: false
#filebeat.autodiscover:
#providers:
#- type: docker
#hints.enabled: true
#processors:
#- add_cloud_metadata: ~
#output.elasticsearch:
#hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
#username: '${ELASTICSEARCH_USERNAME:}'
#password: '${ELASTICSEARCH_PASSWORD:}'

filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/test911/*.log
 
output.logstash:
  hosts: ['192.168.31.193:5044']

运行Filebeat

docker run --name filebeat --user=root -d   --volume="/var/log/test911:/var/log/test911/" --volume="/root/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"  store/elastic/filebeat:7.1.1

查看容器启动状态 

[root@k8s-node3 ~]# docker ps | grep filebeat
40208dfe0dfe        store/elastic/filebeat:7.1.1   "/usr/local/bin/dock…"   3 hours ago         Up 8 seconds  

启动成功

使用filebeat收集日志,需要对logstash的配置文件进行修改,修改如下:

[root@k8s-node3 conf.d]# pwd
/root/logstash/conf.d
[root@k8s-node3 conf.d]# ls
test.conf
[root@k8s-node3 conf.d]# cat test.conf 
input {
    beats {
    port => 5044
    codec => "json"
    }
}

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

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

若想要收集其他服务器上的日志,只需要在其他服务上部署filebeat即可,前提是要保证网络互通,要能访问logstash的5044端口。

大家需要按照自己的需求修改相应的配置!

原文地址:https://www.cnblogs.com/xinxing1994/p/11957081.html