如何在Docker中安装ELK监控日志文件

本文主要接口在docker安装ELK并监控log文件

1. 本地安装Docker

1.1 安装docker软件包
我在windows上面安装的docker,其他系统安装和配置步骤类似,软件包获取地址:

1
2
3
4
5
# docker的windows版本下载地址
https://hub.docker.com/editions/community/docker-ce-desktop-windows

# 或者国内的镜像源
http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

注:这里需要需要注意的一点就是windows上面安装对windows的版本有一定的要求,必须是专业版。

1.2 配置docker

1.2.1. 配置镜像仓库地址

docker官方的镜像仓库在国内的下载速度很慢,达不到个人宽带的上线,所以这里需要配置一个国内的镜像仓库,像阿里云,网易的都有,我这里就用我自己的阿里云镜像仓库
docker镜像仓库

1.2.2 配置共享文件(linux不需要)

因为软件运行的时候总会有一些有状态的配置换数据文件,有了这个共享目录就可以将静态的配置文件和数据文件放在里,通过加载数据卷的形式在docker里面访问。
配置共享文件

1.2.3 重启电脑,

右下角任务栏就会出现一个docker图标,说明docker已经安装成功
打开windows的cmd控制台,输入docker version查看docker版本
查看docker版本

2. 拉取镜像

打开Windows的cmd控制台,依次输入如下命令,并等待镜像下载完成

1
2
3
4
5
6
7
8
9
10
11
# 拉取es镜像
docker pull elasticsearch:7.1.1

# 拉取kibana镜像
docker pull kibana:7.1.1

# 拉取logstash镜像
docker pull logstash:7.1.1

# 拉取filebeat镜像
docker pull store/elastic/filebeat:7.1.1

在以上命令执行完毕后,输入docker images查看已经拉取的镜像文件:
查看docker镜像

3. 安装并执行Elasticsearch

在Windows的cmd控制台输入如下命令进行ES的安装:

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

如果在docker的面板上面看到elasticsearch正在运行表示ES已经按的成功:
查看es是否安装成功
通过访问:localhost:9200可以查看es的运行状态
查看es执行状态

4. 安装并执行Kibana

在Windows的cmd控制台输入如下命令进行Kibana的安装

1
docker run -d --name kibana --net elk_network -p 5601:5601 kibana:7.1.1

访问:localhost:5601如果出现kibana的管理页面说明已经安装成功
访问kibana

5. 安装并执行logstash

5.1 增加本地logstash配置文件

在共享文件下面新建如下目录结构:

1
2
3
4
logstash
----logstash.yml
----conf.d
--------beat.conf

其中logstash.yml的文件内容如下:

1
2
path.config: /usr/share/logstash/conf.d/beat.conf
path.logs: /var/log/logstash

beat.conf文件内容如下

1
2
3
4
5
6
7
8
9
input {
beats {
port => 5044
}
}
output {
elasticsearch { hosts => ["elasticsearch:9200"] }
stdout { codec => rubydebug }
}

5.2 执行logstash的安装命令

注:其中有两个加载卷,映射到上一部新增的配置件

1
2
3
4
docker run -it -d -p 5044:5044 --name logstash --net elk_network \
-v D:/Docker/shareFiles/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v D:/Docker/shareFiles/logstash/conf.d/:/usr/share/logstash/conf.d/ \
logstash:7.1.1

6. 安装并执行Filebeat

6.1 配置filebeat文件

1
2
3
4
filebeat
----filebeat.docker.yml.yml
----test-log # 放自定义的日志文件,此文件家可以删除
--------test.log # 测试用的日志文件,此文件可以删除

filebeat.docker.yml文件的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#=========================== Filebeat inputs =============================

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

# Change to true to enable this input configuration.
enabled: true

# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/nginx/*.log


#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["logstash:5044"]

# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
# ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

# Certificate for SSL client authentication
# ssl.certificate: "/etc/pki/tls/certs/logstash-forwarder.crt"

# Client Certificate Key
# ssl.key: "/etc/pki/tls/private/logstash-forwarder.key"

6.2 执行filebeat安装命令

1
2
3
4
5
6
docker run --name filebeat --user=root -d --net elk_network \
--volume="D:/Docker/shareFiles/filebeat/test-log/:/var/log/nginx/" \
--volume="D:/Docker/shareFiles/filebeat/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

7. 验证效果

按照上述步骤进行安装后,可以发现docker的容器面板会出现很多正在运行的容器:
elk容器都是正在执行
根据如下提示可以过滤出我们记录在日志文件中的内容
在kibana中搜索日志
本地修改filebeat目录中的test.log文件,保存,然后刷新kibana就会发现我们新增的内容出现在message的搜索结果中
验证日志是否推送到kibana

-------------本文结束感谢您的阅读-------------