2. ELK 技术栈回顾:Elasticsearch 核心概念、Logstash 数据采集、Kibana 可视化

在深入冷热分层架构之前,必须重新梳理 ELK 技术栈中三个核心组件的职责与协作关系。Elasticsearch 负责存储与检索,Logstash 负责数据采集与转换,Kibana 负责可视化与交互。三者通过 RESTful API 和标准输出/输入插件形成完整的数据管道。

2.1 Elasticsearch 核心概念

Elasticsearch 是一个基于 Lucene 的分布式搜索与分析引擎,所有数据以 JSON 文档形式存储,并通过倒排索引实现近乎实时的全文检索。

概念 说明 类比关系型数据库
索引(Index) 具有相似特征的文档集合,是数据组织的基本单元 Database
类型(Type) 索引内部的逻辑分类(7.x 后废弃,8.x 完全移除) Table
文档(Document) 可被索引的基本数据单元,以 JSON 格式表示 Row
字段(Field) 文档中的键值对,每个字段可指定数据类型 Column
分片(Shard) 索引的物理子集,每个分片是一个独立的 Lucene 实例 分区
副本(Replica) 分片的冗余拷贝,提供高可用与读扩展能力 备份
节点(Node) 集群中的单个 Elasticsearch 实例 服务器实例
集群(Cluster) 一组节点的集合,共同持有全部数据并提供联合索引与搜索能力 分布式数据库集群
冷热分层关键点: 在冷热架构中,索引是分层的最小管理单元。通过索引生命周期管理(ILM),可以将热节点上的索引自动迁移到冷节点,并最终删除。分片与副本的数量直接影响分层策略的灵活性。
Elasticsearch 核心概念关系图 集群(Cluster) 节点 1(Node) 节点 2(Node) 节点 3(Node) 索引(Index) 索引(Index) 分片 1(Shard) 分片 2(Shard) 分片 1(Shard) 分片 2(Shard) 文档(Document) 文档(Document) 文档(Document) 文档(Document)

2.2 Logstash 数据采集与管道处理

Logstash 是一个服务器端数据处理管道,能够同时从多个来源采集数据,进行实时解析、转换,并发送到 Elasticsearch 或其他存储后端。其核心架构由三个阶段组成:输入(Input) → 过滤(Filter) → 输出(Output)。

2.2.1 管道三阶段

  • Input 插件: 负责从各种数据源读取数据。常用插件包括 file(日志文件)、beats(Filebeat)、kafka、tcp/udp、syslog。
  • Filter 插件: 对输入数据进行解析、转换和丰富。核心插件包括 grok(正则解析)、mutate(字段增删改)、date(时间戳处理)、geoip(地理信息)、useragent(用户代理解析)。
  • Output 插件: 将处理后的数据发送到目标系统。最常用的是 elasticsearch,此外还有 kafka、stdout(调试)、file。
冷热分层中的 Logstash 角色: Logstash 通常负责在数据进入 Elasticsearch 之前完成字段标准化、时间戳统一和索引名称路由。通过 mutate 插件添加 @timestamp 和 index_prefix 字段,可以配合 ILM 策略实现自动分层。

2.2.2 典型 Logstash 配置示例

input {
  beats {
    port => 5044
    codec => "json"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
  }
  mutate {
    add_field => { "index_prefix" => "nginx-access" }
    remove_field => [ "message", "timestamp" ]
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{index_prefix}-%{+YYYY.MM.dd}"
    manage_template => false
  }
  stdout { codec => rubydebug }
}

2.3 Kibana 可视化与交互

Kibana 是 Elastic Stack 的可视化层,提供数据探索、仪表板构建、监控管理和告警功能。在冷热分层场景中,Kibana 主要用于监控集群健康状态、查看索引在各层节点的分布,以及分析日志数据的时效性。

2.3.1 核心功能模块

模块 用途 冷热分层相关场景
Discover 实时搜索与浏览原始文档 验证热数据是否实时可见,冷数据是否可查询
Dashboard 组合多个可视化组件形成监控面板 展示各层节点磁盘使用率、索引生命周期状态
Stack Monitoring 监控 Elasticsearch 集群、Logstash 管道和 Kibana 自身 查看节点角色(hot/warm/cold)、分片分配情况
Index Management 管理索引设置、映射、别名和生命周期策略 手动迁移索引、查看 ILM 执行状态
Canvas 创建像素级精确的数据展示页面 制作面向管理层的冷热分层运营报告
ELK 数据流与冷热分层协作图 数据源 应用日志 / 指标 Logstash 采集 / 解析 / 转换 Elasticsearch 分布式存储与检索 冷热节点管理 Kibana 可视化 / 监控 热节点(Hot) SSD 存储,近期数据 温节点(Warm) HDD 存储,中期数据 冷节点(Cold) 归档存储,历史数据 删除(Delete) 过期数据清理 ILM 策略驱动:索引从热 → 温 → 冷 → 删除,自动迁移 基于索引大小、文档数量或时间条件触发阶段转换

2.4 三组件协作流程总结

  1. 数据采集: Logstash 通过 Input 插件从日志文件、消息队列或网络端口读取原始数据。
  2. 数据解析: Filter 插件使用 Grok 模式匹配、日期解析和字段变换,将非结构化日志转换为结构化 JSON。
  3. 数据索引: 处理后的文档通过 Output 插件写入 Elasticsearch 的指定索引,索引名称通常包含时间后缀(如 nginx-access-2025.03.21)。
  4. 分层存储: Elasticsearch 根据 ILM 策略自动将索引从热节点迁移到温节点、冷节点,最终删除。
  5. 可视化与监控: Kibana 通过 Discover 模块查询各层数据,通过 Stack Monitoring 模块查看节点角色和分片分配状态。
常见误区: 很多初学者认为 Logstash 只负责“转发”数据,忽略了 Filter 阶段对数据质量的决定性影响。在冷热分层场景中,如果 Logstash 没有正确解析 @timestamp 字段,ILM 策略将无法基于时间正确触发索引迁移,导致数据全部堆积在热节点。