2. ELK技术栈回顾
在深入冷热分层架构之前,必须重新梳理 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),可以将热节点上的索引自动迁移到冷节点,并最终删除。分片与副本的数量直接影响分层策略的灵活性。
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 | 创建像素级精确的数据展示页面 | 制作面向管理层的冷热分层运营报告 |
2.4 三组件协作流程总结
- 数据采集: Logstash 通过 Input 插件从日志文件、消息队列或网络端口读取原始数据。
- 数据解析: Filter 插件使用 Grok 模式匹配、日期解析和字段变换,将非结构化日志转换为结构化 JSON。
- 数据索引: 处理后的文档通过 Output 插件写入 Elasticsearch 的指定索引,索引名称通常包含时间后缀(如
nginx-access-2025.03.21)。 - 分层存储: Elasticsearch 根据 ILM 策略自动将索引从热节点迁移到温节点、冷节点,最终删除。
- 可视化与监控: Kibana 通过 Discover 模块查询各层数据,通过 Stack Monitoring 模块查看节点角色和分片分配状态。
常见误区: 很多初学者认为 Logstash 只负责“转发”数据,忽略了 Filter 阶段对数据质量的决定性影响。在冷热分层场景中,如果 Logstash 没有正确解析
@timestamp 字段,ILM 策略将无法基于时间正确触发索引迁移,导致数据全部堆积在热节点。