本文用于记录如何使用Docker Compose部署 EFK(Elasticsearch + Fluentd + Kibana) 收集Docker容器日志,使用EFK,可以无侵入代码,获得灵活,易用的日志收集和分析。
fluentd镜像构建相关文件、docker-compose.yml文件都放在 https://github.com/LXD24/EFK 仓库里。

因为需要Fluentd需要fluent-plugin-elasticsearch插件才能将日志传输到Elasticsearch 存储,所以需要根据fluentd基础镜像构建一个集成fluent-plugin-elasticsearch插件的镜像,当然也可以在网上找一个已经集成的镜像,这里懒得找就自己构建了。
按照 https://github.com/fluent/fluentd-docker-image/blob/master/README.md 上的说明创建个Dockerfile文件,看了说明需要先下载两个文件(fluent.confentrypoint.sh),github上有地址。

Dockerfile内容如下,因为我想着到时挂载fluent.conf配置文件,所以删掉了 COPY fluent.conf /fluentd/etc/ 这句复制配置文件的命令。

  1. FROM fluent/fluentd:v1.11-1
  2. # Use root account to use apk
  3. USER root
  4. # below RUN includes plugin as examples elasticsearch is not required
  5. # you may customize including plugins as you wish
  6. RUN apk add --no-cache --update --virtual .build-deps \
  7. sudo build-base ruby-dev \
  8. && sudo gem install fluent-plugin-elasticsearch \
  9. && sudo gem sources --clear-all \
  10. && apk del .build-deps \
  11. && rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem
  12. #COPY fluent.conf /fluentd/etc/
  13. COPY entrypoint.sh /bin/
  14. USER fluent

然后就是docker build -t custom-fluentd:latest ./ 看着一顿下载构建镜像。

这里我随便弄了个.net core web服务,输出下访问接口的日志到控制台。

内容如下:

  1. version: '2'
  2. services:
  3. webapplication1:
  4. image: webapplication1
  5. container_name: webapplication1
  6. ports:
  7. - '8001:80'
  8. links:
  9. - fluentd
  10. logging:
  11. driver: 'fluentd'
  12. options:
  13. fluentd-address: localhost:24224
  14. tag: httpd.access
  15. fluentd:
  16. image: custom-fluentd
  17. container_name: fluentd
  18. volumes:
  19. - ./fluentd/conf:/fluentd/etc
  20. links:
  21. - 'elasticsearch'
  22. ports:
  23. - '24224:24224'
  24. - '24224:24224/udp'
  25. elasticsearch:
  26. image: elasticsearch:6.6.2
  27. container_name: elasticsearch
  28. ports:
  29. - '9200:9200'
  30. environment:
  31. - 'discovery.type=single-node'
  32. - 'cluster.name=docker-cluster'
  33. - 'bootstrap.memory_lock=true'
  34. - 'ES_JAVA_OPTS=-Xms512m -Xmx512m'
  35. ulimits:
  36. memlock:
  37. soft: -1
  38. hard: -1
  39. volumes:
  40. - ./data:/usr/share/elasticsearch/data
  41. kibana:
  42. image: kibana:6.6.2
  43. container_name: kibana
  44. links:
  45. - 'elasticsearch'
  46. ports:
  47. - '5601:5601'

webapplication1是我创建的web服务,需要配置日志驱动为fluentd
fluentd需要挂载fluent.conf配置文件,fluent.conf内容如下:

  1. <source>
  2. @type forward
  3. port 24224
  4. bind 0.0.0.0
  5. </source>
  6. <match *.**>
  7. @type copy
  8. <store>
  9. @type elasticsearch
  10. host elasticsearch
  11. port 9200
  12. logstash_format true
  13. logstash_prefix fluentd
  14. logstash_dateformat %Y%m%d
  15. include_tag_key true
  16. type_name access_log
  17. tag_key @log_name
  18. flush_interval 1s
  19. </store>
  20. <store>
  21. @type stdout
  22. </store>
  23. </match>

到yml文件夹目录下敲 docker-compose up 启动。

看到四个服务都是done的就可以了。
先访问下webapplication1造点日志,然后访问 http://localhost:5601 ,为Kibana设置匹配的索引名

然后就能看到收集的日志了。

版权声明:本文为xiao24原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiao24/p/13260319.html