大数据 -167 ELK Elastic Stack(ELK) 实战:架构要点、索引与排错清单

TL;DR
场景:分布式系统需要集中式日志/搜索/可视化与告警。
结论:用 Elasticsearch 8.x + Logstash + Kibana 形成统一采集→索引→分析闭环,先小步上线再按吞吐扩容。
产出:架构要点提炼、版本适配矩阵
ELK
集中式日志系统
日志,对于任何系统来说都是重要的组成部分,在计算机系统里面,更是如此。但是由于现在的计算机系统大多比较复杂,狠毒哦系统都不是在一个地方,甚至都是跨国界的,即使在一个地方的系统,也有不同的来源,比如:操作系统、应用服务、业务逻辑等等。他们都在不停的产生各种各样的日志数据,根据不完全统计,我们每天大约要生产 2EB 的数据。
面对海量的数据,又是分布式在各个不同的地方,如果我们需要去查找一些重要的信息,难道还是使用传统的方法,去登陆到一台机器上看看吗?看来传统的工具和方法是非常笨拙和低效的。于是,一些聪明人就提出了建立一套集中的方法,把不同来源的数据集中整合到一个地方。一个完整的集中式日志系统,是离不开以下几个主要特点的:
收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制
#ELK 协议栈介绍和体系结构
ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写(Elasticsearch ES),Logstash、Kibana。这三款都是开源软件,配合使用,而先后又归于 Elasttic.co 公司名下,简称 ELK 协议栈。
Elasticsearch
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,主要用于实时全文搜索、分析、日志管理和数据存储。由于其高度扩展性和分布式架构,Elasticsearch 被广泛应用于企业搜索、监控系统、日志分析、推荐系统等场景。
主要特点
实时分析
分布式实时文件存储,并将每一个字段都编入索引
文档导向,所有的对象全部是文档
高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。
接口友好、支持 JSON
核心功能
全文搜索:Elasticsearch 可以快速、高效地进行全文搜索,支持模糊匹配、通配符查询、布尔查询等。
分布式架构与高可用性:集群由多个节点组成,每个节点负责不同的数据分片,确保数据在多个节点上冗余存储,以提高系统的容错能力和高可用性。
实时数据分析:支持实时数据插入、更新和查询,适合日志分析、监控等对时效性要求高的应用场景。
支持多种数据类型:支持结构化、半结构化和非结构化数据,如 JSON、文本、地理位置数据等。
RESTful API:Elasticsearch 采用 RESTful 风格的 API,通过 HTTP 接口与客户端交互,易于集成。
基本架构
集群(Cluster)
定义:集群是由多个相互连接的 Elasticsearch 节点组成的集合,它们共同工作以提供分布式搜索和分析能力。
唯一标识:每个集群必须有一个唯一的名称(默认是
elasticsearch),用于区分不同的集群环境(如开发、测试、生产)。数据一致性:集群通过分布式架构确保数据的高可用性和一致性。例如,当一个节点故障时,其他节点会自动接管其工作,保证服务不中断。
典型应用场景:跨数据中心的日志分析系统可能需要多个集群协同工作,每个集群处理特定区域的数据。
节点(Node)
定义:节点是集群中的一个 Elasticsearch 实例,通常运行在独立的服务器或容器中。
角色分类:
主节点(Master Node):负责集群管理操作(如创建/删除索引、节点状态监控)。生产环境中建议配置 3 个专用主节点以避免脑裂问题。
数据节点(Data Node):存储索引数据并执行数据相关的操作(如搜索、聚合)。需要较高的磁盘和内存资源。
协调节点(Coordinating Node):接收客户端请求并将任务分发到其他节点,最后聚合结果。在大型集群中可独立部署以减轻主节点和数据节点负载。
配置示例:通过
node.roles: [ data, master ]参数指定节点角色。
索引(Index)
类比关系:类似于关系型数据库中的"表",但设计上更灵活,无需预定义严格的结构(支持动态映射)。
组成:
分片(Shard):每个索引被水平分割为多个分片(默认 1 个主分片),实现数据分布式存储和并行处理。
副本(Replica):每个分片可以有多个副本(默认 1 个),提供故障恢复能力。例如,设置
number_of_replicas: 2表示每个主分片有 2 个副本。生命周期管理:可通过 ILM(Index Lifecycle Management)自动实现索引的滚动创建(如每天生成新索引)、归档和删除。
文档(Document)
基本单元:以 JSON 格式存储的数据记录,例如一条商品信息或日志条目。
唯一标识:通过
_id字段唯一标识(可自动生成或手动指定),结合索引名称构成全局唯一性(类似<index>/<type>/<id>的路径)。元数据字段:除用户自定义数据外,每个文档包含系统元数据如
_version(乐观锁控制)、_source(原始 JSON 内容)等。示例:
分片与副本(Shard & Replica)
为了实现水平扩展,索引被分成多个主分片(Primary Shard)。每个主分片可以有多个副本(Replica Shard),提高容错性和读取性能。
查询与分析
查询 DSL(Query DSL):Elasticsearch 使用 JSON 格式的 DSL(Domain-Specific Language)进行查询,包括:
Match Query:进行全文搜索。
Term Query:精确匹配某一字段的值。
Range Query:进行范围查询(如时间范围)。
Bool Query:组合多个查询条件(如 AND、OR)。
聚合(Aggregation):用于对大数据集进行分组统计和分析,如求平均值、最大值、最小值等。支持以下类型:
Bucket Aggregation:按条件分组,如基于时间的日期直方图。
Metric Aggregation:求和、计数、平均值等。
Pipeline Aggregation:基于前一个聚合结果计算的二次聚合。
典型应用场景
日志分析和监控:与 Logstash 和 Kibana 组合形成 ELK(Elastic Stack),用于实时日志监控和数据可视化。
企业级搜索引擎:支持全文搜索、推荐系统、网站内容搜索等。
电商平台:用于实现商品搜索和推荐功能。
地理空间数据查询:支持 geo_point 和 geo_shape 类型数据,用于存储和分析位置数据。
数据仓库分析:支持大数据实时分析,替代部分传统 OLAP 系统。
Logstash
Logstash 是一个具有实时渠道能力的数据收集引擎,使用 JRuby 语言编写,作者是世界著名的运维工程师乔丹西塞(JordanSissel)主要特点有:
几乎可以访问任何数据
可以和多种外部应用结合
支持弹性扩展
Shipper - 发送日志数据
Broker - 收集数据 缺省内置 Redis
Indexer - 数据写入
Kibana
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写的,为 Elasticsearch 提供可视化分析和 Web 平台,它可以在 Elasticsearch 的索引中查找,交互数据,生成各种维度的表图。
ELK 整体架构
参考文档
ELK 官网:https://www.elastic.co/
ELK 官网文档:https://www.elastic.co/guide/index.html
ELK 中文手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ELK 中文社区:https://elasticsearch.cn/
ELK API :https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/travelansport-client.html
使用案例
2013 年初,GitHub 抛弃了 Solr,采取 Elasticsearch 来做 PB 级的搜索,“Github 使用 Elasticsearch 搜索 20TB 的数据,包括 13 亿文件和 1300 亿航代码”
维基百科,启动 Elasticsearch 为基础的核心搜索架构
SoundCloud,SoundCloud 使用 Elasticsearch 为 1.8 亿用户提供即时而精准的音乐搜索服务
百度,百度目前广泛使用 Elasticsearch 作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示、辅助定位分析实例异常或业务异常。目前覆盖百度内部 20 多个业务线(包括 casio、云分析、网盟、预测、文库、直达号、钱包、风控等)。单集群最大 100 台机器,200 个 ES 节点,每天导入 30TB+数据。
新浪使用 ES 分析处理 32 亿条实时日志
阿里使用 ES 构建自己的日志采集和分析系统
对比 Solr
分布式管理机制
Solr 依赖 ZooKeeper 进行集群管理和配置同步,需要额外部署和维护 ZooKeeper 集群
Elasticsearch 内置分布式协调功能(基于 Zen Discovery 模块),无需额外组件即可实现节点发现、集群状态管理等功能,部署更简单
数据格式支持
Solr 支持多种数据格式:
XML
CSV
JSON
二进制格式(如 PDF、Word 等通过 Tika 解析)
Elasticsearch 仅原生支持 JSON 格式,但可以通过 Logstash 等工具进行格式转换后导入
功能生态对比
Solr 官方提供完整功能套件:
数据导入处理器(DIH)
丰富的查询分析器
图形化管理界面
Elasticsearch 采用"核心+插件"架构:
专注索引和搜索核心功能
高级功能(如机器学习、告警等)通过插件实现
拥有更活跃的第三方插件生态
搜索性能特点
Solr 优势场景:
传统批处理式搜索(如电商商品目录搜索)
复杂条件组合查询
对查询延迟要求不高的场景
Elasticsearch 优势场景:
实时搜索(如日志分析、监控系统)
近实时(NRT)索引更新(默认 1s 刷新间隔)
高吞吐量的数据写入场景
典型应用案例:ELK 日志分析栈中的日志检索
补充对比维度
学习曲线:
Solr 配置相对复杂,需要理解多个配置文件
Elasticsearch REST API 更符合现代开发习惯
社区支持:
Elasticsearch 拥有更活跃的开发者社区
Solr 在企业级应用中仍有稳定用户群
错误速查
其他系列
🚀 AI 篇持续更新中(长期更新)
AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI 研究-127 Qwen2.5-Omni 深解:Thinker-Talker 双核、TMRoPE 与流式语音🔗 AI模块直达链接
💻 Java 篇持续更新中(长期更新)
Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务已完结,Dubbo 已完结,MySQL 已完结,MongoDB 已完结,Neo4j 已完结,FastDFS 正在更新,深入浅出助你打牢基础!🔗 Java模块直达链接
📊 大数据板块已完成多项干货更新(300 篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接
版权声明: 本文为 InfoQ 作者【武子康】的原创文章。
原文链接:【http://xie.infoq.cn/article/158b7ac34e175cd69552ddd49】。文章转载请联系作者。







评论