ELK是Elasticsearch、Logstash和Kibana三个核心组件的首字母组合,是一套开源的日志收集、存储、分析与可视化工具栈。随着功能扩展,Elastic公司将其升级为Elastic Stack,新增了Beats组件,形成了"Beats + Logstash + Elasticsearch + Kibana"的架构。

下面详细介绍各组件:

Elasticsearch、Logstash 和 Kibana。也可称为 Elastic Stack。

Elasticsearch 是一个分布式、RESTful 风格的、并且拥有极佳的 查询能力、数据分析、统计能力,每个数据都被编入索引,包括全文检索/地理位置/列存储等。能够水平扩展集群,每秒处理海量事件,自动管理索引和分布式集群中的查询,以惊叹的速度实现极其流畅的操作。

Logstash 是服务器端数据处理管道,在数据传输过程中,能够解析其中的各个事件,识别已命名的字段或以重新构建结构,比如把相似的数据从新划分或组装,也可同时从多个来源采集数据,并将它们转换成通用格式,发送到(ES)存储库中,以便进行更强大的分析和实现更大价值。

Kibana 则可以进行全面透彻的分析后,从一个 UI 中进行监督和管理,并从多个用例和团队中透视出大量信息,发现洞察/调查威胁/监测系统/评估搜索性能等。也就是将数据转变为结果。

ℹ️也就是说:Logstash 采集数据 >> Elasticsearch 数据分析 >> Kibana 呈现结果,不如看下官网对于ELK的架构图:

elk-stack-elkb-diagram.svg

一、Elasticsearch(存储与检索核心)

定位

分布式、高扩展、高实时的全文搜索引擎,同时也是一个NoSQL数据库(基于Lucene引擎开发)。

核心功能

  1. 数据存储与组织:接收并存储来自Logstash的结构化日志数据,以"索引(Index)"形式组织数据(类似数据库的"表")
  2. 快速检索:支持毫秒级的快速检索和聚合分析(如统计某类错误日志的出现次数、按时间维度聚合请求量等)
  3. 分布式特性:通过"分片(Shard)"和"副本(Replica)"实现数据分片存储与高可用,轻松应对TB级甚至PB级数据

架构特点

  • 节点(Node):集群中每个运行的Elasticsearch实例称为一个节点,包括数据节点、主节点和客户端节点
  • 索引(Index):类似于传统数据库中的"数据库",用于存储和组织文档
  • 分片与副本:索引被划分为多个分片,每个分片可配置副本,实现负载均衡与故障恢复
  • 倒排索引:基于Lucene引擎,通过倒排索引记录词(Term)与文档的关联关系,实现快速全文检索

典型应用场景

  • 日志数据的快速查询(如"查询昨天18点某服务器的ERROR级日志")
  • 指标聚合(如"统计近1小时各服务的请求成功率")
  • 实时数据分析与可视化

二、Logstash(数据收集与预处理)

定位

开源的数据收集引擎,专注于"从多源采集数据→预处理清洗→输出到目标存储"。

核心功能

  1. 多源采集:支持从文件(如服务器日志文件)、数据库(MySQL、MongoDB)、消息队列(Kafka、RabbitMQ)、API接口等数十种来源获取数据
  2. 数据预处理:通过"过滤器(Filter)"对原始数据进行清洗、结构化(如提取日志中的"时间戳"、"IP地址"、"错误码"等字段)、格式转换(如JSON格式化)、数据过滤
  3. 多目标输出:默认输出到Elasticsearch,也可输出到Kafka、文件、数据库等

工作原理(插件化管道模型)

Logstash采用输入(Input)、过滤(Filter)、输出(Output)三个阶段的管道模型:

  1. Input(输入):从各种数据源采集数据,生成Logstash事件(Event)
  2. Filter(过滤):对事件进行解析和增强,包括:
    • Grok:通过正则表达式解析非结构化文本
    • Mutate:修改字段(重命名、删除、类型转换)
    • 其他过滤器:日期格式化、字段重命名、数据类型转换等
  3. Output(输出):将处理后的数据发送到目标系统

技术特点

  • 插件化架构:所有功能通过插件实现,支持自定义插件开发
  • 多线程处理:每个Input启动一个线程,这些线程并行运行,提高处理效率
  • 事件模型:数据在管道中封装为事件(JSON对象),包含原始数据、元数据(如@timestamp)和自定义字段

典型应用场景

  • 从多台Web服务器的access.log文件中采集访问日志,提取"请求URL"、"响应时间"、"客户端IP"等字段
  • 清洗和标准化来自不同系统的日志数据,使其符合统一格式

三、Kibana(可视化与交互界面)

定位

Elasticsearch的配套可视化工具,提供Web界面用于数据查询、报表生成和仪表盘展示。

核心功能

  1. 数据查询:通过"Discover"模块可视化操作Elasticsearch的查询语法(无需手动写DSL语句)
  2. 可视化图表:支持生成多种图表:
    • 折线图(如"按分钟统计错误日志趋势")
    • 柱状图(如"各服务错误数对比")
    • 饼图(如"日志级别分布")
    • 地图(如"客户端IP地域分布")
  3. 自定义仪表盘:将多个图表组合成仪表盘,支持定时刷新和权限控制

功能模块

  1. Discover(发现):实时浏览Elasticsearch中的原始数据,支持关键词搜索、字段筛选、时间范围选择
  2. Visualize Library(可视化库):创建各种图表,支持聚合(terms、date histogram、avg、sum等)
  3. Dashboard(仪表盘):将多个可视化图表组合成交互式面板,支持全局时间过滤器和过滤器联动

典型应用场景

  • 运维人员通过Kibana仪表盘实时监控系统健康状态
  • 开发人员通过日志查询定位线上bug
  • 业务分析师通过图表分析业务指标趋势

四、Elastic Stack扩展:Beats

随着ELK的演进,Elastic公司引入了Beats组件,形成Elastic Stack:

Beats定位

轻量级数据采集器(客户端程序),替代Logstash的"采集端"功能,资源占用极低。

常见子类型

  1. Filebeat:采集日志文件(最常用)
  2. Metricbeat:采集系统/应用指标(如CPU、内存、接口QPS)
  3. Packetbeat:采集网络数据包
  4. Winlogbeat:采集Windows系统日志

为什么引入Beats?

Logstash作为Java程序,资源占用较高(需JVM支持),不适合在成千上万的服务器/终端上部署采集端;而Beats是Go语言开发的轻量级程序(内存占用通常<10MB),可直接部署在每台目标机器上,高效采集数据后发送给Logstash或直接发送到Elasticsearch。

五、ELK/Elastic Stack整体工作流程

  1. 数据采集:Beats(如Filebeat)在各服务器上采集日志数据
  2. 数据处理:Logstash接收Beats发送的数据,进行清洗、格式化、转换等处理
  3. 数据存储:处理后的数据被发送到Elasticsearch进行存储和索引
  4. 数据可视化:Kibana从Elasticsearch中查询数据,生成图表和仪表盘

这种架构使ELK/Elastic Stack能够高效处理海量日志数据,并转化为可理解的可视化信息,广泛应用于企业级日志管理、运维监控、业务数据分析等场景。