使用Docker Compose轻松部署EFK日志基础设施
简易的日志平台
最近,我感到网络运营的主战场从Google Analytics独占的网络运营逐渐转向建立自己的DWH(数据仓库)的运营。
作为在网络领域工作的工程师,我们必须采购一些日志基础设施。
然而,我想很多人也会为不知道该使用什么而苦恼。
隨心所欲地製作鐵板結構
在各种选择中,选择下述选项会感觉更轻松。
-
- ログ集める:Fluentd
-
- ログためとく:Elasticsearch
- ログ見る:Kibana
由于 Elasticsearch 并不擅长保存数据,所以如果你希望彻底保存数据,请将其导出到 S3 或文件等存储介质中。在我们今天介绍的 Fluentd 中,数据也会被输出到文件,所以可以放心使用。
这道题目
可以用以下的方式来启动。
$ git clone https://github.com/foursue/efk.git
$ cd efk
$ docker-compose up
等待一会儿,启动后访问http://localhost:5601/。
这样一个页面将打开。

可以将日志按照喜好的方式投送到Fluentd,也可以直接投送到Elasticsearch。
说明
本次使用docker-compose搭建EFK。
docker-compose.yml的内容如下。
fluentd:
build: ./fluentd
volumes:
- ./log:/fluentd/log
- ./fluentd/conf:/fluentd/etc
links:
- "elasticsearch"
ports:
- "24224:24224"
- "24224:24224/udp"
elasticsearch:
image: elasticsearch
expose:
- 9200
ports:
- "9200:9200"
kibana:
image: kibana
links:
- "elasticsearch"
ports:
- "5601:5601"
在这个配置中,你可以直接从外部主机将日志投放到Elasticsearch中,也可以先将日志集中到Fluentd容器,然后再投放到Elasticsearch中。
流畅的日志收集器
Fluentd的配置文件大致如下所示。
<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 logstash
logstash_dateformat %Y%m%d
include_tag_key true
type_name access_log
tag_key @log_name
flush_interval 20
</store>
<store>
type file
path /fluentd/log/access_log
</store>
</match>
使用Docker的内部名称解析链接来解析elasticsearch的IP地址并投入配置。虽然只投入了作为access_log,但在这方面您可以自由发挥。
除了投入到Elasticsearch之外,还将其输出到”/fluentd/log/access_log”等地方。但这样做会增加负载,所以等熟悉了之后可以考虑将其删除或从容器中移出。
总结
因为源代码非常短,请查看GitHub链接:
https://github.com/foursue/efk