使用docker安装filebeat收集日志

墨蓝 2021-12-24 01:59 823阅读 0赞

前言

本文主要是记录了使用docker-compose安装filebeat的过程,使用filebeat收集日志,直接发送到elasticsearch。kibana与elasticsearch已经提前安装,也是使用docker-compose安装,可参考我的文章https://blog.csdn.net/maquealone/article/details/89417257。

本来刚开始是想使用filebeat的nginx模块收集nginx日志的,但是开启nginx模块没有成功,一直报错,找了很多方法也没有解决,所以直接使用手动配置的方式来收集日志。

目录结构

20190626172222745.png

logs:日志目录

data: 数据目录

镜像构建文件

  1. FROM registry.cn-hangzhou.aliyuncs.com/aliyunff/filebeat:6.5.4
  2. ##enable Nginx modules,注意这里需要开启filebeat的Nginx模块
  3. # RUN /usr/share/filebeat/filebeat modules enable nginx
  4. COPY filebeat.yml /usr/share/filebeat/filebeat.yml
  5. USER root
  6. RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
  7. USER filebeat

本来想在Dockerfile中启动nginx模块,然后通过nginx模块收集nginx日志的,但是不知为何启动nginx模块会报错,于是注释了启动nginx模块的命令,直接使用手动的方式手机日志。

编排文件

  1. version: '2.3'
  2. services:
  3. beat:
  4. build:
  5. context: ${PWD}/.
  6. user: root
  7. environment:
  8. - BEAT_STRICT_PERMS=false
  9. restart: always
  10. networks:
  11. - elastic_esnet
  12. volumes:
  13. #filebeat.yml作为配置文件,ro表示只读
  14. - ${PWD}/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
  15. #为了filebeat的module.d配置nginx.yml
  16. - ${PWD}/modules.d:/usr/share/filebeat/modules.d
  17. - /var/lib/docker/containers:/var/lib/docker/containers:ro
  18. # We launch docker containers to test docker autodiscover:
  19. - /var/run/docker.sock:/var/run/docker.sock
  20. # 把logs和data共享出来
  21. - ${PWD}/logs:/usr/share/filebeat/logs
  22. - ${PWD}/data:/usr/share/filebeat/data
  23. ##为了读取外部的日志文件,开启共享,下面举例为读取外部Nginx的/var/logs/nginx里的日志
  24. - /home/wwwlogs:/var/log/nginx
  25. networks:
  26. elastic_esnet:
  27. external: true

注意,此处的networks是关键,因为filebeat需要跟elasticsearch和kibana通信,所以必须让elasticsearch和kibana处于同一网络。由于我的elasticsearch与kibana之前已经通过docker-compose安装了,通过docker network ls查看网络。

20190626173253682.png

这个就是之前安装的elasticsearch使用的网络。

filebeat配置文件

  1. filebeat.inputs:
  2. - type: log
  3. paths:
  4. - /var/log/nginx/*.log
  5. #filebeat.config.modules:
  6. ##加载modules的配置
  7. # path: ${path.config}/modules.d/*.yml
  8. # Set to true to enable config reloading
  9. # reload.enabled: true
  10. #-------------------------- Elasticsearch output ------------------------------
  11. # 这里我们不输出到es,果断注释掉
  12. output.elasticsearch:
  13. # Array of hosts to connect to.
  14. hosts: ["elasticsearch:9200"]
  15. #index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
  16. #============================== Kibana =====================================
  17. # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
  18. # This requires a Kibana endpoint configuration.
  19. setup.kibana:
  20. host: "kibana:5601"
  21. setup.dashboards:
  22. enabled: true

此处的重点是elasticsearch和kibana的地址一定要写成elasticsearch和kibana的服务名称,不要用默认的localhost,如果写成localhost会报连接elasticsearch失败的错误。因为elasticsearch、filebeat处于同一网络下,可以通过服务发现的方式进行通信。

运行

  1. docker-compose up -d

进入kibana,可以看到有数据了。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21hcXVlYWxvbmU_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,823人围观)

还没有评论,来说两句吧...

相关阅读

    相关 filebeat收集json格式的

    正常情况下,我们收集到的日志的格式可能和我们要求的不太一样,所以需要将日志按照我们要求的格式进行展现,在kibana中也可以直接过滤搜索。 查找对应的版本,我的是7.3版本的