ELK——日志收集、分析和展示的解决方案
认识ELK
ELK
并不是某个技术框架的名称,它实际上是三个工具的集合,分别是 ElasticSearch(ES)
、Logstash
和 Kibana
。ELK
的每个字母都来自一个工具名称,取这三个工具各自的首字母,就组成了 ELK
。这三个工具组成了一套实用、易用的监控架构,是 Elastic
公司推出的一整套日志收集、分析和展示的解决方案,很多公司利用它来搭建可视化的海量日志分析平台。
Elastic Search
是一个基于 Lucene
的开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户功能的全文搜索引擎,基于 RESTful Web
接口。Elastic Search
是基于 Java
语言开发的,并作为 Apache
许可条款下的开放源码发布,是当前流行的企业级搜索引擎。它被用于云计算中,能够进行实时搜索,稳定、可靠、快速,安装和使用方便。
Logstash
是一个用于管理日志和事件的工具,主要进行日志的搜集、分析、过滤,支持大量的数据获取方式。一般工作方式为 C/S
架构,Client
端安装在需要收集日志的主机上,Server
端负责将收到的各节点日志进行过滤、修改等操作,再一并发往 Elastic Search
。
Kibana
是一个优秀的前端日志展示框架,它可以通过报表、图形化数据为 Logstash
和 ElasticSearch
进行 Web
界面可视化展示,可以汇总、分析和搜索重要数据日志,为用户提供强大的数据可视化支持。
ELK的工作流程
ELK
技术栈中三大组件的大致工作流程如图 13-1 所示,先由 Logstash
从各个日志源头(系统日志、程序日志、MySQL
日志等)采集日志数据并存放至 Elastic Search
中,然后由 Kibana
从 Elastic Search
中查询日志,最终呈现给开发/运维人员。

在 ELK
日志中心方案里,Logstash
扮演了一个日志收集器的角色。它可以从多个数据源中对数据进行采集,并对数据进行格式化、过滤和简单的数据处理。
Elastic Search
是一个分布式的搜索和数据分析引擎,接收来自 Logstash
的日志信息,对这些日志信息进行索引处理,并将这些日志信息集中存储。这些数据在 Elastic Search
中索引完成后,便可针对这些数据进行更为复杂的搜索。Elastic Search
对外提供了多种 RESTful
风格的接口,上层应用可以通过这些接口完成数据查找和分析的任务。
Kibana
提供了一套 UI
界面,开发/运维人员可以对 Elastic Search
中索引和存储的数据进行查找。同时,Kibana
还提供了各种统计报表的功能,如柱状图、饼图、时序统计分析、图谱关联分析等。
ELK的优势
在企业开发流程中,构建一套集中日志管理和搜索系统可以有效提升定位问题的效率。一个完整的集中日志管理系统需要包括以下主要功能。
-
收集:可以从各种来源收集日志信息。
-
传输:可以稳定地将日志数据传输到日志系统。
-
存储:可以存储日志数据。
-
分析:可以支持UI分析。
-
警告:可以提供错误报告和监控机制。
ELK
提供了一整套的解决方案,并且 ELK
技术栈中的技术全部都是开源软件,供开发人员免费使用。
当然,仅仅只是免费不可能获得开发人员那么多青睐,市面上有很多免费的框架,但是目前并没有任何一个能够撼动 ELK
的地位。除免费外,活跃的 Elastic
社区和强大的技术支持也是非常重要的原因。
另外,打铁还需自身硬,除上述的两个优势外,使用 ELK
技术栈作为日志中心的解决方案还有如下优势。
-
强大的搜索功能:
Elastic Search
可以在分布式搜索模式下快速搜索,支持DSL
语法搜索,简而言之就是通过类似配置的语言快速过滤数据。 -
完美的显示功能:可以显示非常详细的图表信息,自定义显示内容,将数据可视化到极致。
-
分布式功能:可以解决大型集群运行维护中的许多问题,包括监控、预警、日志收集和分析等。
ELK增强版
谈到日志中心的搭建,ELK
确实是不二的选择。不管是大型企业、中型企业,还是小型企业,只要技术团队想要搭建日志中心,绝大多数都会选择使用由 ELK
技术栈搭建的日志中心或由 ELK
衍生的日志中心(如 ELBK
或 ELBFK
)。
一般情况下,在使用 ELK
技术栈搭建日志中心时,只部署单体的 ELK
技术栈即可。整套部署下来,也只需要一个 Logstash
实例、一个 Elastic Search
实例和一个 Kibana
实例,如图 13-2 所示,大部分业务都是能够正常支撑的。

如果业务线较多且系统体量大,就会使日志量增多,可以在单体部署的基础上进行优化,如部署多个 Logstash
实例,Elastic Search
可采用集群部署的形式,如图 13-3 所示。

当然,想要一步到位,搭建 ELK
日志中心 “究极体”,可以引入 FileBeat
组件和 Kafka
消息队列。Logstash
组件只作为日志过滤的工具,把日志采集流程交给 FileBeat
组件,而 Kafka
用于削峰填谷,减轻日志中心在数据采集时的压力。同时,各组件在搭建时都需要进行分布式部署或集群部署,如图 13-4 所示。
