使用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/。
这样一个页面将打开。

Kibana.png

可以将日志按照喜好的方式投送到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

bannerAds