写点什么

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

作者:武子康
  • 2025-11-29
    山东
  • 本文字数:4078 字

    阅读完需:约 13 分钟

大数据-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 内容)等。

  • 示例


  {    "_index": "products",    "_id": "101",    "_source": {      "name": "Wireless Mouse",      "price": 29.99,      "category": "Electronics"    }  }
复制代码

分片与副本(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

  1. 分布式管理机制

  2. Solr 依赖 ZooKeeper 进行集群管理和配置同步,需要额外部署和维护 ZooKeeper 集群

  3. Elasticsearch 内置分布式协调功能(基于 Zen Discovery 模块),无需额外组件即可实现节点发现、集群状态管理等功能,部署更简单

  4. 数据格式支持

  5. Solr 支持多种数据格式:

  6. XML

  7. CSV

  8. JSON

  9. 二进制格式(如 PDF、Word 等通过 Tika 解析)

  10. Elasticsearch 仅原生支持 JSON 格式,但可以通过 Logstash 等工具进行格式转换后导入

  11. 功能生态对比

  12. Solr 官方提供完整功能套件:

  13. 数据导入处理器(DIH)

  14. 丰富的查询分析器

  15. 图形化管理界面

  16. Elasticsearch 采用"核心+插件"架构:

  17. 专注索引和搜索核心功能

  18. 高级功能(如机器学习、告警等)通过插件实现

  19. 拥有更活跃的第三方插件生态

  20. 搜索性能特点

  21. Solr 优势场景:

  22. 传统批处理式搜索(如电商商品目录搜索)

  23. 复杂条件组合查询

  24. 对查询延迟要求不高的场景

  25. Elasticsearch 优势场景:

  26. 实时搜索(如日志分析、监控系统)

  27. 近实时(NRT)索引更新(默认 1s 刷新间隔)

  28. 高吞吐量的数据写入场景

  29. 典型应用案例:ELK 日志分析栈中的日志检索

  30. 补充对比维度

  31. 学习曲线:

  32. Solr 配置相对复杂,需要理解多个配置文件

  33. Elasticsearch REST API 更符合现代开发习惯

  34. 社区支持:

  35. Elasticsearch 拥有更活跃的开发者社区

  36. 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 案例 详解🔗 大数据模块直达链接

发布于: 刚刚阅读数: 2
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-167 ELK Elastic Stack(ELK) 实战:架构要点、索引与排错清单_大数据_武子康_InfoQ写作社区