EFK
参考链接:https://www.sohu.com/a/441834063_198222
ELK 简介
ELK 是 Elastic 公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是 Elasticsearch、Logstash 和 Kibana。
Elasticsearch 是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能
Logstash 是一个用来搜集、分析、过滤日志的工具
Kibana 是一个基于 Web 的图形界面,用于搜索、分析和可视化存储在 Elasticsearch 指标中的日志数据
ELK 日志处理流程
上图展示了在 Docker 环境下,一个典型的 ELK 方案下的日志收集处理流程:
Logstash 从各个 Docker 容器中提取日志信息
Logstash 将日志转发到 Elasticsearch 进行索引和保存
Kibana 负责分析和可视化日志信息
由于 Logstash 在数据收集上并不出色,而且作为 Agent,其性能并不达标。基于此,Elastic 发布了 beats 系列轻量级采集组件。
这里我们要实践的 Beat 组件是 Filebeat,Filebeat 是构建于 beats 之上的,应用于日志收集场景的实现,用来替代 Logstash Forwarder 的下一代 Logstash 收集器,是为了更快速稳定轻量低耗地进行收集工作,它可以很方便地与 Logstash 还有直接与 Elasticsearch 进行对接。
本次实验直接使用 Filebeat 作为 Agent,它会收集我们在第一篇《Docker logs & logging driver》中介绍的 json-file 的 log 文件中的记录变动,并直接将日志发给 Elasticsearch 进行索引和保存,其处理流程变为下图,你也可以认为它可以称作 EFK。
Fluentd 引入
关于 Fluentd
前面我们采用的是 Filebeat 收集 Docker 的日志信息,基于 Docker 默认的 json-file 这个 logging driver,这里我们改用 Fluentd 这个开源项目来替换 json-file 收集容器的日志。
Fluentd 是一个开源的数据收集器,专为处理数据流设计,使用 JSON 作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。Fluentd 也是云原生基金会(CNCF)的成员项目之一,遵循 Apache 2 License 协议,其 GitHub 地址为:https://github.com/fluent/fluentd/。Fluentd 与 Logstash 相比,比占用内存更少、社区更活跃,两者的对比可以参考这篇文章《Fluentd vs Logstash[2]》。
因此,整个日志收集与处理流程变为下图,我们用 Filebeat 将 Fluentd 收集到的日志转发给 Elasticsearch。
当然,我们也可以使用 Fluentd 的插件(fluent-plugin-elasticsearch)直接将日志发送给 Elasticsearch,可以根据自己的需要替换掉 Filebeat,从而形成 Fluentd => Elasticsearch => Kibana 的架构,也称作 EFK。