EFK - XLab-Tongji/AIOpsConceptualModeling GitHub Wiki

EFK简介:

EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。其中Elasticsearch是一款分布式搜索引擎,能够用于日志的检索,Fluentd是一个实时开源的数据收集器,而Kibana 是一款能够为Elasticsearch 提供分析和可视化的 Web 平台。这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。

整体框架及各组件介绍:

整体框架图:

https://upload-images.jianshu.io/upload_images/7982144-f32d3f8ef05eca8c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200

EFK架构:

各组件简介:

  • Elasticsearch:Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。
  • Fluentd:Fluentd是一个开源的数据收集器,专为处理数据流设计,使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。
  • Beats :Beats是数据采集的得力工具。将 Beats 和您的容器一起置于服务器上,或者将 Beats 作为函数加以部署,然后便可在 Elastisearch 中集中处理数据。 如果需要更加强大的处理性能,Beats 还能将数据输送到 Logstash 进行转换和解析。
  • logstash:logstash接收来自filebeat的日志流,进行规则解析,写入到es;
  • Kibana:Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图,等等。不仅如此,您还可以使用 Vega 语法来设计独属于您自己的可视化图形。所有这些都利用 Elasticsearch 的完整聚合功能。

Elasticsearch 通常与 Kibana 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 允许你通过 web 界面来浏览 Elasticsearch 日志数据。

ELK架构图:

https://upload-images.jianshu.io/upload_images/7982144-229c6bba4b89cb0a.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200

由图可知,当我们在Docker中运行应用(application)时,filebeat收集容器中的日志。ElasticSearch收到日志对日志进行实时存储、搜索与分析。我们可在Kibana和Grafana这两个可视化工具中查看日志的操作结果。

EFK架构:

Fluentd是一个开源的数据收集器,专为处理数据流设计,使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。因此,加入Fluentd来收集日志。

EFK架构图:

https://upload-images.jianshu.io/upload_images/7982144-f32d3f8ef05eca8c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200

在这个图中,上下两个框分别表示使用Fluentd前后的日志收集。在第二个框中,Consul能够使用灵活的key/value仓库去存储动态配置。而confd能够使用从consul来的模版管理本地配置。

日志收集&传输

使用logstash作为agent

在最初的elk方案中,使用logstash作为agent部署在各个client上进行日志的收集、解析直接写到es中。但是在要接入的服务非常多,日志量不断增大的场景中,这种方式会造成以下影响:

  1. logstash非常占用内存,会对本机器上部署的线上服务产生影响
  2. 直接写es会对es造成非常大的压力

filebeat使用go开发的,其轻量级特性非常适合作为agent部署在client上,可以起到日志收集的作用。

使用filebeat作为agent

日志规则解析

logstash

logstash是一款强大的数据处理工具,它可以实现数据传输、数据处理、格式化输出,还有强大的插件功能,常用于日志的处理。在本文中,logstash的作用主要是接收从filebeats上收集的日志,进行相应的规则匹配,写入到相应的es索引中。

日志存储查询

elasticsearch

elasticsearch是一个全文检索引擎,主要用于日志的结构化存储和查询。

kibana

kibana用于进行日志的查询、报表显示,可以理解为es的一个可视化操作界面。