簡述
最近需要用到容器日志收集,目前比較流行的應該是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)