ELK——日志收集、分析和展示的解决方案

认识ELK

ELK 并不是某个技术框架的名称,它实际上是三个工具的集合,分别是 ElasticSearch(ES)LogstashKibanaELK 的每个字母都来自一个工具名称,取这三个工具各自的首字母,就组成了 ELK。这三个工具组成了一套实用、易用的监控架构,是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案,很多公司利用它来搭建可视化的海量日志分析平台。

Elastic Search 是一个基于 Lucene 的开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户功能的全文搜索引擎,基于 RESTful Web 接口。Elastic Search 是基于 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。它被用于云计算中,能够进行实时搜索,稳定、可靠、快速,安装和使用方便。

Logstash 是一个用于管理日志和事件的工具,主要进行日志的搜集、分析、过滤,支持大量的数据获取方式。一般工作方式为 C/S 架构,Client 端安装在需要收集日志的主机上,Server 端负责将收到的各节点日志进行过滤、修改等操作,再一并发往 Elastic Search

Kibana 是一个优秀的前端日志展示框架,它可以通过报表、图形化数据为 LogstashElasticSearch 进行 Web 界面可视化展示,可以汇总、分析和搜索重要数据日志,为用户提供强大的数据可视化支持。

ELK的工作流程

ELK 技术栈中三大组件的大致工作流程如图 13-1 所示,先由 Logstash 从各个日志源头(系统日志、程序日志、MySQL 日志等)采集日志数据并存放至 Elastic Search 中,然后由 KibanaElastic Search 中查询日志,最终呈现给开发/运维人员。

image 2025 04 18 14 35 47 516
Figure 1. 图13-1 ELK技术栈中三大组件的大致工作流程

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 衍生的日志中心(如 ELBKELBFK)。

一般情况下,在使用 ELK 技术栈搭建日志中心时,只部署单体的 ELK 技术栈即可。整套部署下来,也只需要一个 Logstash 实例、一个 Elastic Search 实例和一个 Kibana 实例,如图 13-2 所示,大部分业务都是能够正常支撑的。

image 2025 04 18 14 38 48 385
Figure 2. 图13-2 ELK 技术栈搭建日志中心

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

image 2025 04 18 14 39 41 621
Figure 3. 图13-3 Elastic Search 集群部署

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

image 2025 04 18 14 40 21 586
Figure 4. 图13-4 分布式部署