> 文章列表 > docker搭建elk+filebeat

docker搭建elk+filebeat

docker搭建elk+filebeat

0. 架构

版本号:

  • ElasticSearch -7.4.2
  • Kibana - 7.4.2
  • logstash - 7.4.2
  • filebeat - 7.4.2

docker搭建elk+filebeat

如果后续日志数据海量也可以加上缓存redis或者消息队列进行升级

前言:

  • 需要先自定义一个docker网络,来使elasticsearch和logstash的ip地址固定,不然的话docker重启后可能会导致ip变动出现的问题
  • 自定义网络后在docker run 时指定自己想要的自定义ip,不让docker自动给你分配

1. docker创建自定义网络

章节一只是创建网络,如果要使用该网络是在docker run时指定的,后续章节会docker run是注意指定ip即可

#查看docker的网络
docker network ls
#创建一个网段在172.22.1.x 和网关为172.22.1.1的桥接类型网络名叫elk-net
docker network create --driver bridge --subnet 172.22.1.0/24 --gateway 172.22.1.1 elk-net
#查看docker网络,网络是否创建成功
docker network ls

docker搭建elk+filebeat

2. docker创建ElasticSearch实例

同时指定elasticsearch容器内网ip为172.22.1.2

#先将es的数据与配置与需要映射的文件夹创建好
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
#配置es地址
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
#保证权限
chmod -R 777 /mydata/elasticsearch/ 
#创建并启动实例
docker run --name elasticsearch \\
--network elk-net --ip 172.22.1.2 \\
-p 9200:9200 -p 9300:9300 \\
-e "discovery.type=single-node" \\-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \\
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \\
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \\
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \\
-d elasticsearch:7.4.2
#查看容器的ip是否是我们自己分配的ip,例如下查看容器名称为elasticsearch的ip(容器起来后才能看到)
docker inspect elasticsearch  |grep IPAddress

docker搭建elk+filebeat

测试是否搭建成功:http://127.0.0.1:9200/

docker搭建elk+filebeat

3. 创建Kibana实例

同时指定elasticsearch容器内网ip为172.22.1.3

#不能使用公网ip,使用内网es分配的ip启动kibana ,以下命令查看elasticsearch内网ip为172.22.1.2
docker inspect elasticsearch  |grep IPAddress
#注意配置自己的IP地址
docker run --network elk-net --ip 172.22.1.3 \\
--name kibana -e ELASTICSEARCH_HOSTS=http://172.22.1.2:9200 -p 5601:5601  -d kibana:7.4.2

测试是否搭建成功:http://127.0.0.1:5601/

docker搭建elk+filebeat

4. 创建logstash

mkdir -p /mydata/logstash/config
chmod -777 /mydata/logstash

创建logstash.yml

#创建logstash.yml配置文件
vim /mydata/logstash/config/logstash.yml
#文件内容如下:
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://172.22.1.2:9200" ]

创建logstash.config

#创建logstash.config配置文件
vim /mydata/logstash/config/logstash.config
#文件内容如下:
# 从filebeat中输入
input {beats {port => "5044"}
}# 输出到es中
output {# 推荐下面这种写法,比较简洁elasticsearch {hosts => [ "172.22.1.2:9200"]# 刷新频率#flush_size => 1000#es中创建索引的名称(注意 index里面不能存在大写字符)index => "%{[fields][appname]}-%{+YYYY.MM.dd}"document_type => "log"}
}

启动logstash

同时指定logstash容器内网ip为172.22.1.4

docker run --network elk-net --ip 172.22.1.4 \\
-p 5044:5044 -p 4560:4560 -d --name logstash \\
-v /mydata/logstash/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw \\
-v /mydata/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:rw \\
logstash:7.4.2

5. 创建filebeat

创建外挂目录

mkdir -p /mydata/filebeat/data
mkdir -p /mydata/filebeat/config
mkdir -p /mydata/filebeat/log
chmod 777 /mydata/filebeat/

查询logstash内网地址

#不能使用公网ip,使用内网es分配的ip启动kibana ,以下命令查看logstash内网ip为172.22.1.4
docker inspect logstash  |grep IPAddress

创建filebeat.yml配置文件

touch /mydata/filebeat/config/filebeat.yml

filebeat.yml内容:

# 设置filebeat的输入为文件输入
filebeat.inputs:
# 这里可以配置多个path,采集不同应用服务的日志,然后在logstash中按照应用服务名为index保存到es中
- type: logenabled: true# 采集指定目录的日志(模拟采集第一个应用服务的日志)paths:- /mydata/filebeat/log/*.log# 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引fields:appname: test-admin1# 将属性放到根下 比如 appname 属性,在其他地方访问直接 [appname] 即可访问,不开启的话需要 [fields][appname]才能访问#fields_under_root: true- type: logenabled: true# 采集指定目录的日志(模拟采集第二个应用服务的日志)paths:- /mydata/filebeat/log/*.log# 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引fields:appname: test-admin#fields_under_root: true
# 指定索引的分区数
setup.template.settings:index.number_of_shards: 3#指定logstash的配置,日志采集后输出到logstash中
output.logstash:hosts: ["172.22.1.4:5044"]

注意/mydata/filebeat/log/*.log是我们容器内部的日子扫描路径,如果是使用docker的话需要外挂该目录不然filebeat扫描不到日志

启动filebeat:外挂日志目录和配置文件

同时指定filebeat容器内网ip为172.22.1.5

filebeat有需要的话可以多启动几个,只需要指定不同的外挂地址即可,就和架构图一致了

docker run -d \\
--network elk-net --ip 172.22.1.5 \\
--name=filebeat \\
-v /mydata/filebeat/log/:/usr/share/filebeat/logs \\
-v /mydata/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \\
docker.elastic.co/beats/filebeat:7.4.2

6. 导入日志进行测试

我将日志导入到我安装docker的机器上模拟日志输出

docker搭建elk+filebeat

此时filebeat是会检测到的,会输出一下日志

docker搭建elk+filebeat

然后我们上Kibana发现有日志导入es成功

docker搭建elk+filebeat