前言
本文介绍如何将Docker日志收集到EFK(Elasticsearch + Fluentd + Kibana)的stack,该示例使用Docker Compose设置多个容器。
Elasticsearch是一个以易用性着称的开源搜索引擎。Kibana是一个开源的Web UI,使Elasticsearch对工程师和数据科学家都很友好。
通过结合这三个工具EFK(Elasticsearch + Fluentd + Kibana),我们可以获得可扩展,灵活,易用的日志收集和分析。在本文中,我们将设置4个容器,每个容器包括:
httpd
的所有日志都会通过Fluentd被收集到Elasticsearch 。
先决条件:Docker
请下载并安装Docker / Docker Compose。
第1步:准备docker-compose.yml
首先,为Docker Compose准备docker-compose.yml文件
。Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。
使用下面的YAML文件,您可以通过一个命令创建和启动所有容器服务(在本例中为Apache,Fluentd,Elasticsearch,Kibana)。
version: '2'
services:
web:
image: httpd
ports:
- "80:80"
links:
- fluentd
logging:
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: httpd.access
fluentd:
build: ./fluentd
volumes:
- ./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"
logging
标签(参考Docker Compose文档)是容器web
指定Docker Fluentd Logging Driver作为容器日志收集的驱动。web
容器中的所有日志都将自动转发到fluentd-address
指定设置的地址
。
第2步:准备Fluentd镜像和Elasticsearch插件
准备下面内容作为fluentd/Dockerfile,使用Fluentd的官方Docker镜像,并另外安装Elasticsearch插件。
#fluentd / Dockerfile
FROM fluent / fluentd:v0.12-debian
RUN [“gem”,“install”,“fluent-plugin-elasticsearch”,“ - no-rdoc”,“ - no-ri”,“ - -version“,”1.9.2“]
然后,准备Fluentd的配置文件fluentd/conf/fluent.conf。
# fluentd/conf/fluent.conf
<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>
第3步:启动容器
仅仅需要一个命令来启动所有容器。
$ docker-compose up
docker ps命令检查4个容器是否正在运行。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d28323d77a3 httpd "httpd-foreground" About an hour ago Up 43 seconds 0.0.0.0:80->80/tcp dockercomposeefk_web_1
a1b15a7210f6 dockercomposeefk_fluentd "/bin/sh -c 'exec ..." About an hour ago Up 45 seconds 5140/tcp, 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp dockercomposeefk_fluentd_1
01e43b191cc1 kibana "/docker-entrypoin..." About an hour ago Up 45 seconds 0.0.0.0:5601->5601/tcp dockercomposeefk_kibana_1
b7b439415898 elasticsearch "/docker-entrypoin..." About an hour ago Up 50 seconds 0.0.0.0:9200->9200/tcp, 9300/tcp dockercomposeefk_elasticsearch_1
第4步:产生容器httpd访问日志
让我们访问httpd来生成一些访问日志。
$ repeat 10 curl http:// localhost:80 /
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1> </ body> </ html>
<html> <body> <h1>它有效!</ h1>
</ body> </ html> <html> <body> <h1>它有效!</ h1> </ body> </ html>
第5步:通过Kibana查看日志
在你的浏览器中访问http://localhost:5601/,然后为Kibana设置匹配的索引名,请使用fluentd-*作为索引名,并点击“Create”按钮。
然后,去Discover页面选项卡查看日志。 正如你看见的,通过Fluentd将日志正确的收集到Elasticsearch + Kibana中。
结论
本文介绍如何从Apache HTTP Server收集日志到EFK(Elasticsearch + Fluentd + Kibana)。提供的示例代码脚本:https://github.com/kzk/docker-compose-efk
原文:https://docs.fluentd.org/v0.12/articles/docker-logging-efk-compose