• 欢迎访问IT乐园(o゚▽゚)o
  • 推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。

docker 搭建 EFK 日志集中收集系统

编程开发 fhy 2个月前 (10-15) 173次浏览 0个评论
文章目录[隐藏]

docker 搭建 EFK(ElasticSearch+Fluentd+Kibana)日志集中收集系统

EFK 日志采集系统

简介

EFK = ElasticSearch + Fluentd + Kibana

Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。

Fluentd 是一个优秀的 log 信息收集开源免费软件。

Kibana 是一个开源的分析与可视化平台,可以用 kibana 搜索、查看存放在 Elasticsearch 中的索引。

版本

当前最新的 Release 版本

Elasticsearch : v6.4.2 – 2018/10/02

Fluentd : v1.2.6 – 2018/10/03

Kibana : v6.4.2 – 2018/10/02

主要介绍 Fluentd

Fluentd 是一个完全开源免费的日志收集系统。它主要使用 c 语言编写并由轻量级的 Ruby 封装,给用户提供灵活的扩展性,因此它目前有 125 以上插件。结合不同插件可实现:异常报警(alerting)、数据分析(analysis)、归档(archiving)等等功能。

特点:

1)安装方便

2)占用空间小

3)半结构化数据日志记录

4)灵活的插件机制

5)可靠的缓冲

6)日志转发

使用前

docker 搭建 EFK 日志集中收集系统

使用后

docker 搭建 EFK 日志集中收集系统

使用场景

1.apache 日志到 mongodb

步骤:

1.轮询监控 access_log 文件。

2.将传入的日志记录解析为有意义的字段(例如:ip, path,user_agent 等)并缓冲他们。

3.定时将缓冲区内容写入 MongoDB

docker 搭建 EFK 日志集中收集系统

2.程序推送

配置 fluent.conf

JAVA

PHP

3.docker 日志

fluent.conf

docker-compose.yml 加入如下配置信息

4.多节点集中收集

“日志聚合器” 是继续从日志转发器接收事件的守护程序。 他们缓冲事件并定期将数据上传到云中。

docker 搭建 EFK 日志集中收集系统

5.日志可视化

该图为上文所提到的 EFK 日志系统架构

docker 搭建 EFK 日志集中收集系统

插件

Fluentd 存在 7 种类型的插件:

Input 输入,从外部源检索和提取事件日志。

Parser 解析器,允许用户创建自定义的解析器。

Filter 过滤器,用于过滤输入内容(例如: 隐私信息)

Output 输出

Formatter 格式化器

Storage 存储引擎

Buffer 缓冲区

以下主要介绍 Input Filter Output 这 3 种插件

输入(Input)

Fluentd 支持多种的输入类型,支持 udp tcp http 等数据包的监听。既支持网络协议传输的数据流,也支持从文件中读取数据。

监听 tcp 数据包例子

配置

发送数据包

fluentd 解析

过滤(Filter)

过滤插件使 Fluentd 可以修改事件流。

示例用例:

通过删除一个或多个字段的值来过滤事件
通过添加新字段丰富事件 例如:给某个符合的记录,添加一个字段标记
删除或屏蔽某些字段,以确保隐私权和合规性。

Event processing pipeling(事件处理流)

filter 指令具有与 match 相同的语法,但是 filter 可以串联成 pipeline,对数据进行串行处理,最终再交给 match 输出。 使用 fliters,事件流如下:

例 1:

配置:

测试:

输出:

上面的指令用标签 foo 匹配事件。如果 action 字段的值包含 logout,则事件将过滤该记录。

例 2:

只有其 message 字段包含 cool 的事件才会添加新的 hostname 字段,并将机器的主机名作为其值。

如果有多个 filter 标签,命中上一个才会继续往下匹配。

这个例子里,filter 获取数据后,调用原生的 @type record_transformer 插件,在事件的 record 里插入了新的字段 host_param,然后再交给 match 输出。

filter 匹配顺序与 match 相同,应该在 <match> 之前放置 <filter>

输出(Output)

存在 3 种输出模式:

  • Non-Buffered mode(不缓冲): 不缓存数据并立即写出结果。
  • Synchronous Buffered mode(同步缓冲模式): 具有“分段”缓冲块(块是事件的集合)和块的队列,其行为可以由 <buffer> 部分控制(见下图)。
  • Asynchronous Buffered mode(异步步缓冲模式): 也存在 stagequeue,但是 output plugin 不会同步提交写块,而是在以后提交。

docker 搭建 EFK 日志集中收集系统

输出插件可以支持所有模式,但只支持其中一种模式。如果配置中没有的部分,Fluentd 会自动选择合适的模式。

总结

Input 负责接收数据或者主动抓取数据。支持 sysloghttpfile tail 等。

Buffer 负责数据获取的性能和可靠性,也有文件或内存等不同类型的 Buffer 可以配置。

Output 负责输出数据到目的地例如文件,AWS S3 或者其它的 Fluentd。

docker 搭建 EFK 日志集中收集系统

Docker 环境下搭建 EFK

docker 运行容器

Server

Tree

docker-compose.yml

elasticsearch

elasticsearch.yml

fluentd

Dockerfile

conf

fluent.conf

kibana

kibana.yml

Client

Tree

docker-compose.yml

fluentd

Dockerfile

conf

fluent.conf

参考

https://docs.fluentd.org/v1.0/articles/in_forward

https://docs.fluentd.org/v1.0/articles/out_forward

https://docs.fluentd.org


IT 乐园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:docker 搭建 EFK 日志集中收集系统
喜欢 (0)
关于作者:
九零后挨踢男
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址