elk各组件简介
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的架构图:
一、Elasticsearch(存储与检索核心)
定位
分布式、高扩展、高实时的全文搜索引擎,同时也是一个NoSQL数据库(基于Lucene引擎开发)。
核心功能
- 数据存储与组织:接收并存储来自Logstash的结构化日志数据,以"索引(Index)"形式组织数据(类似数据库的"表")
- 快速检索:支持毫秒级的快速检索和聚合分析(如统计某类错误日志的出现次数、按时间维度聚合请求量等)
- 分布式特性:通过"分片(Shard)"和"副本(Replica)"实现数据分片存储与高可用,轻松应对TB级甚至PB级数据
架构特点
- 节点(Node):集群中每个运行的Elasticsearch实例称为一个节点,包括数据节点、主节点和客户端节点
- 索引(Index):类似于传统数据库中的"数据库",用于存储和组织文档
- 分片与副本:索引被划分为多个分片,每个分片可配置副本,实现负载均衡与故障恢复
- 倒排索引:基于Lucene引擎,通过倒排索引记录词(Term)与文档的关联关系,实现快速全文检索
典型应用场景
- 日志数据的快速查询(如"查询昨天18点某服务器的ERROR级日志")
- 指标聚合(如"统计近1小时各服务的请求成功率")
- 实时数据分析与可视化
二、Logstash(数据收集与预处理)
定位
开源的数据收集引擎,专注于"从多源采集数据→预处理清洗→输出到目标存储"。
核心功能
- 多源采集:支持从文件(如服务器日志文件)、数据库(MySQL、MongoDB)、消息队列(Kafka、RabbitMQ)、API接口等数十种来源获取数据
- 数据预处理:通过"过滤器(Filter)"对原始数据进行清洗、结构化(如提取日志中的"时间戳"、"IP地址"、"错误码"等字段)、格式转换(如JSON格式化)、数据过滤
- 多目标输出:默认输出到Elasticsearch,也可输出到Kafka、文件、数据库等
工作原理(插件化管道模型)
Logstash采用输入(Input)、过滤(Filter)、输出(Output)三个阶段的管道模型:
- Input(输入):从各种数据源采集数据,生成Logstash事件(Event)
- Filter(过滤):对事件进行解析和增强,包括:
- Grok:通过正则表达式解析非结构化文本
- Mutate:修改字段(重命名、删除、类型转换)
- 其他过滤器:日期格式化、字段重命名、数据类型转换等
- Output(输出):将处理后的数据发送到目标系统
技术特点
- 插件化架构:所有功能通过插件实现,支持自定义插件开发
- 多线程处理:每个Input启动一个线程,这些线程并行运行,提高处理效率
- 事件模型:数据在管道中封装为事件(JSON对象),包含原始数据、元数据(如@timestamp)和自定义字段
典型应用场景
- 从多台Web服务器的access.log文件中采集访问日志,提取"请求URL"、"响应时间"、"客户端IP"等字段
- 清洗和标准化来自不同系统的日志数据,使其符合统一格式
三、Kibana(可视化与交互界面)
定位
Elasticsearch的配套可视化工具,提供Web界面用于数据查询、报表生成和仪表盘展示。
核心功能
- 数据查询:通过"Discover"模块可视化操作Elasticsearch的查询语法(无需手动写DSL语句)
- 可视化图表:支持生成多种图表:
- 折线图(如"按分钟统计错误日志趋势")
- 柱状图(如"各服务错误数对比")
- 饼图(如"日志级别分布")
- 地图(如"客户端IP地域分布")
- 自定义仪表盘:将多个图表组合成仪表盘,支持定时刷新和权限控制
功能模块
- Discover(发现):实时浏览Elasticsearch中的原始数据,支持关键词搜索、字段筛选、时间范围选择
- Visualize Library(可视化库):创建各种图表,支持聚合(terms、date histogram、avg、sum等)
- Dashboard(仪表盘):将多个可视化图表组合成交互式面板,支持全局时间过滤器和过滤器联动
典型应用场景
- 运维人员通过Kibana仪表盘实时监控系统健康状态
- 开发人员通过日志查询定位线上bug
- 业务分析师通过图表分析业务指标趋势
四、Elastic Stack扩展:Beats
随着ELK的演进,Elastic公司引入了Beats组件,形成Elastic Stack:
Beats定位
轻量级数据采集器(客户端程序),替代Logstash的"采集端"功能,资源占用极低。
常见子类型
- Filebeat:采集日志文件(最常用)
- Metricbeat:采集系统/应用指标(如CPU、内存、接口QPS)
- Packetbeat:采集网络数据包
- Winlogbeat:采集Windows系统日志
为什么引入Beats?
Logstash作为Java程序,资源占用较高(需JVM支持),不适合在成千上万的服务器/终端上部署采集端;而Beats是Go语言开发的轻量级程序(内存占用通常<10MB),可直接部署在每台目标机器上,高效采集数据后发送给Logstash或直接发送到Elasticsearch。
五、ELK/Elastic Stack整体工作流程
- 数据采集:Beats(如Filebeat)在各服务器上采集日志数据
- 数据处理:Logstash接收Beats发送的数据,进行清洗、格式化、转换等处理
- 数据存储:处理后的数据被发送到Elasticsearch进行存储和索引
- 数据可视化:Kibana从Elasticsearch中查询数据,生成图表和仪表盘
这种架构使ELK/Elastic Stack能够高效处理海量日志数据,并转化为可理解的可视化信息,广泛应用于企业级日志管理、运维监控、业务数据分析等场景。
- 感谢你赐予我前进的力量