Docker Compose部署 EFK(Elasticsearch + Fluentd + Kibana)收集日志


簡述

最近需要用到容器日志收集,目前比較流行的應該是EL(Logstash)K,EF(Fluentd)K,相比之下Fluentd要比Logstash輕量級,所以決定采用Fluentd。

本文用於記錄如何使用Docker Compose部署 EFK(Elasticsearch + Fluentd + Kibana) 收集Docker容器日志,使用EFK,可以獲得靈活,易用的日志收集和分析。
fluentd鏡像構建相關文件、docker-compose.yml文件都放在 https://github.com/LXD24/EFK 倉庫里。

1、首先弄個fluentd鏡像

因為Fluentd需要fluent-plugin-elasticsearch插件才能將日志傳輸到Elasticsearch,所以需要根據fluentd基礎鏡像構建一個集成插件的鏡像。

相關資料:

fluentd官方鏡像:https://hub.docker.com/_/fluentd?tab=description
fluentd官方構建鏡像實例:https://github.com/fluent/fluentd-docker-image/blob/master/README.md

新建個dockerfile文件構建鏡像,dockerfile內容很簡單,基礎鏡像上在裝個 fluent-plugin-elasticsearch 插件,裝插件需要切換到root用戶,否則會提示沒權限(沒有sudo命令)

FROM fluent/fluentd:v1.9.1-debian-1.0
User root
RUN gem install fluent-plugin-elasticsearch
User fluent

然后執行docker build -t custom-fluentd:latest ./ 構建鏡像,下載fluentd基礎鏡像的時間可能會稍長

2、准備一個會輸出日志的鏡像

這里我就用了nginx官方鏡像,每次訪問nginx的時候它都會輸出一段日志。

3、編寫docker-compose.yml

內容如下:

version: '2'
services:
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - '8001:80'
    links:
      - fluentd
    logging:
      driver: 'fluentd'
      options:
        fluentd-address: localhost:24224
        tag: nginx

  fluentd:
    image: custom-fluentd
    container_name: fluentd
    volumes:
      - ./fluentd/conf:/fluentd/etc
    links:
      - 'elasticsearch'
    ports:
      - '24224:24224'
      - '24224:24224/udp'

  elasticsearch:
    image: elasticsearch:6.6.2
    container_name: elasticsearch
    ports:
      - '9200:9200'
    environment:
      - 'discovery.type=single-node'
      - 'cluster.name=docker-cluster'
      - 'bootstrap.memory_lock=true'
      - 'ES_JAVA_OPTS=-Xms512m -Xmx512m'
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data:/usr/share/elasticsearch/data

  kibana:
    image: kibana:6.6.2
    container_name: kibana
    links:
      - 'elasticsearch'
    ports:
      - '5601:5601'

nginx映射本地端口8001,需要配置日志驅動為fluentd;
kibana映射本地5601端口;
fluentd需要掛載fluent.conf配置文件,主要配置鏈接es的信息和存儲日志的格式。內容如下:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>
<match *.**>
  @type copy
  <store>
    @type elasticsearch
    host elasticsearch
    port 9200
    logstash_format true
    logstash_prefix fluentd
    logstash_dateformat %Y%m%d
    include_tag_key true
    type_name access_log
    tag_key @log_name
    flush_interval 1s
  </store>
  <store>
    @type stdout
  </store>
</match>

4、啟動

到yml文件夾目錄下敲 docker-compose up 啟動。

先訪問下nginx主頁 curl http://localhost:8001 ,讓他輸出點訪問日志

打開kibana配置下Index Patterns

然后進入discover,就可以看到fluentd收集上來的日志(container_name為/nginx)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM