EFK(Elasticsearch + Fluentd + Kibana)方式进行Docker日志收集、检索展示

本文介绍如何将Docker日志收集到EFK(Elasticsearch + Fluentd + Kibana)的stack,该示例使用Docker Compose设置多个容器。

EFK(Elasticsearch + Fluentd + Kibana)方式进行Docker日志收集、检索展示_第1张图片

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”按钮。

EFK(Elasticsearch + Fluentd + Kibana)方式进行Docker日志收集、检索展示_第2张图片

然后,去Discover页面选项卡查看日志。 正如你看见的,通过Fluentd将日志正确的收集到Elasticsearch + Kibana中。

EFK(Elasticsearch + Fluentd + Kibana)方式进行Docker日志收集、检索展示_第3张图片

结论

本文介绍如何从Apache HTTP Server收集日志到EFK(Elasticsearch + Fluentd + Kibana)。提供的示例代码脚本:https://github.com/kzk/docker-compose-efk

版权申明:内容来源网络,版权归原创者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。



了解更多技术,欢迎关注下方公众号

EFK(Elasticsearch + Fluentd + Kibana)方式进行Docker日志收集、检索展示_第4张图片

你可能感兴趣的:(EFK(Elasticsearch + Fluentd + Kibana)方式进行Docker日志收集、检索展示)