本文介绍如何将Docker日志收集到EFK(Elasticsearch + Fluentd + Kibana)的stack,该示例使用Docker Compose设置多个容器。
Elasticsearch是一个以易用性着称的开源搜索引擎。Kibana是一个开源的Web UI,使Elasticsearch对工程师和数据科学家都很友好。
通过结合这三个工具EFK(Elasticsearch + Fluentd + Kibana),我们可以获得可扩展,灵活,易用的日志收集和分析。在本文中,我们将设置4个容器,每个容器包括:
Apache HTTP Server
Fluentd
Elasticsearch
Kibana
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标签是容器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
@typeforward
port 24224
bind0.0.0.0
@typecopy
@typeelasticsearch
host elasticsearch
port 9200
logstash_formattrue
logstash_prefix fluentd
logstash_dateformat %Y%m%d
include_tag_keytrue
type_name access_log
tag_key @log_name
flush_interval 1s
@typestdout
第3步:启动容器
仅仅需要一个命令来启动所有容器。
$ docker-compose up
你可以通过docker ps命令检查4个容器是否正在运行。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d28323d77a3 httpd"httpd-foreground"About anhourago Up43seconds0.0.0.0:80->80/tcp dockercomposeefk_web_1
a1b15a7210f6 dockercomposeefk_fluentd"/bin/sh -c 'exec ..."About anhourago Up45seconds5140/tcp,0.0.0.0:24224->24224/tcp,0.0.0.0:24224->24224/udp dockercomposeefk_fluentd_1
01e43b191cc1 kibana"/docker-entrypoin..."About anhourago Up45seconds0.0.0.0:5601->5601/tcp dockercomposeefk_kibana_1
b7b439415898 elasticsearch"/docker-entrypoin..."About anhourago Up50seconds0.0.0.0:9200->9200/tcp,9300/tcp dockercomposeefk_elasticsearch_1
第4步:产生容器httpd访问日志
让我们访问httpd来生成一些访问日志。
$ repeat 10 curl http:// localhost:80 /
它有效!
它有效!
它有效!
它有效!
它有效!
它有效!
它有效!
它有效!
它有效!
它有效!
第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
版权申明:内容来源网络,版权归原创者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。
了解更多技术,欢迎关注下方公众号