docker搭建elk+filebeat

0. 架构

版本号:

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

image-20230406113505447

如果后续日志数据海量也可以加上缓存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

image-20230412175156554

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

image-20230412175543665

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

image-20230404104902375

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/

image-20230404110450572

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: log
  enabled: true
  # 采集指定目录的日志(模拟采集第一个应用服务的日志)
  paths:
    - /mydata/filebeat/log/*.log
  # 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引
  fields:
    appname: test-admin1
  # 将属性放到根下 比如 appname 属性,在其他地方访问直接 [appname] 即可访问,不开启的话需要 [fields][appname]才能访问
  #fields_under_root: true

- type: log
  enabled: 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的机器上模拟日志输出

image-20230406114357933

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

image-20230406114456004

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

image-20230406112104378

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值