大数据-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 内容)等。
  • 示例
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整体架构

参考文档

使用案例

  • 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. 分布式管理机制

    • Solr 依赖 ZooKeeper 进行集群管理和配置同步,需要额外部署和维护 ZooKeeper 集群
    • Elasticsearch 内置分布式协调功能(基于 Zen Discovery 模块),无需额外组件即可实现节点发现、集群状态管理等功能,部署更简单
  2. 数据格式支持

    • Solr 支持多种数据格式:
      • XML
      • CSV
      • JSON
      • 二进制格式(如 PDF、Word 等通过 Tika 解析)
    • Elasticsearch 仅原生支持 JSON 格式,但可以通过 Logstash 等工具进行格式转换后导入
  3. 功能生态对比

    • Solr 官方提供完整功能套件:
      • 数据导入处理器(DIH)
      • 丰富的查询分析器
      • 图形化管理界面
    • Elasticsearch 采用"核心+插件"架构:
      • 专注索引和搜索核心功能
      • 高级功能(如机器学习、告警等)通过插件实现
      • 拥有更活跃的第三方插件生态
  4. 搜索性能特点

    • Solr 优势场景:
      • 传统批处理式搜索(如电商商品目录搜索)
      • 复杂条件组合查询
      • 对查询延迟要求不高的场景
    • Elasticsearch 优势场景:
      • 实时搜索(如日志分析、监控系统)
      • 近实时(NRT)索引更新(默认 1s 刷新间隔)
      • 高吞吐量的数据写入场景
      • 典型应用案例:ELK 日志分析栈中的日志检索
  5. 补充对比维度

    • 学习曲线:
      • Solr 配置相对复杂,需要理解多个配置文件
      • Elasticsearch REST API 更符合现代开发习惯
    • 社区支持:
      • Elasticsearch 拥有更活跃的开发者社区
      • Solr 在企业级应用中仍有稳定用户群

错误速查

症状 根因 定位 修复
集群 Yellow/Red & 分片 UNASSIGNED 节点掉线/磁盘水位/路由限制 _cluster/health_cat/shards、ES 日志 释放磁盘/调 cluster.routing.allocation.*;reroute 或恢复节点后自动分配
写入被拒(429/CircuitBreakingException) JVM heap 压力/字段爆炸 _nodes/stats、GC 日志、索引写入速率 控制字段基数与映射;禁用不必要 fielddata;增内存/扩节点;批量写入节流
慢查询/CPU 飙升 通配/前缀正则、深分页、脚本聚合 搜索慢日志、profile API keyword 精确匹配;改 search_after/point in time;必要时预聚合
Kibana "server is not ready" ES 未就绪/版本不匹配/权限问题 Kibana 日志、/api/status 对齐版本;校验 elasticsearch.hosts 与用户权限;等待 ES 绿/黄后再启动
Logstash 队列阻塞/丢数据 输出端背压/PQ 满/插件异常 /var/lib/logstash/queue、管道监控 API 提升输出吞吐/并发;扩大 PQ;启用 DLQ;修复异常插件或目标端
时间轴错乱/图表空洞 时区处理不一致/字段非 date _mapping、样例文档 统一用 @timestamp(UTC);显式 date 类型与 timezone;在 Ingest 规范化时间
映射冲突/同字段不同类型 多源写入未控 schema GET _mapping、模板检查 固化 Index Template;冲突字段改名或重建索引+reindex
ES 启动报 vm.max_map_count 过低 OS 虚拟内存限制 ES 启动日志 sysctl -w vm.max_map_count=262144 并写入系统配置;重启 ES
SSL 握手失败/PKIX 错误 证书 CN/SAN 不匹配/CA 链缺失 Kibana/Logstash/ES 日志 重新签发含正确 SAN 的证书;统一信任链;校验 ssl.* 配置
索引只读(磁盘高水位) 磁盘 > 高水位触发保护 集群日志、_cluster/settings 清理磁盘/扩容;下调阈值;解锁:index.blocks.read_only_allow_delete=false

其他系列

🚀 AI篇持续更新中(长期更新)

AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究 ,持续打造实用AI工具指南! AI研究-127 Qwen2.5-Omni 深解:Thinker-Talker 双核、TMRoPE 与流式语音

💻 Java篇持续更新中(长期更新)

Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍 MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务已完结,Dubbo已完结,MySQL已完结,MongoDB已完结,Neo4j已完结,FastDFS 正在更新,深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

相关推荐
9号达人1 小时前
优惠系统演进:从"实时结算"到"所见即所得",前端传参真的鸡肋吗?
java·后端·面试
wei_shuo1 小时前
openEuler 底座赋能:openGauss 数据库部署与性能实战评测
后端
用户4098170215101 小时前
Python 的基本类型
后端
codetown2 小时前
openai-go通过SOCKS5代理调用外网大模型
人工智能·后端
星辞树2 小时前
MIT 6.824 Lab 3 通关实录:从 Raft 到高可用 KV 存储
后端
20岁30年经验的码农2 小时前
Java Elasticsearch 实战指南
java·开发语言·elasticsearch
艾莉丝努力练剑2 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
智能相对论2 小时前
10万人共同选择的背后,Rokid乐奇有自己的“破圈秘籍”
大数据·智能眼镜
人大博士的交易之路3 小时前
龙虎榜——20251128
大数据·数学建模·数据挖掘·数据分析·缠论·龙虎榜·道琼斯结构