Skip to content

ELK Stack 整体架构与数据流

想象一下,你运营着一个日活 100 万的电商平台。突然,用户开始抱怨系统慢,你如何在海量日志中找到问题所在?

ELK Stack 就是来解决这个问题的——它让你能从海量数据中快速发现问题的真相。

1. ELK Stack 是什么?

ELK Stack 是三个开源工具的组合:

┌─────────────────────────────────────────────────────────────┐
│                       ELK Stack                             │
│                                                               │
│   ┌─────────┐   ┌─────────┐   ┌─────────┐                │
│   │Elastic- │   │Logstash │   │ Kibana  │                │
│   │search   │ ← │         │ ← │         │                │
│   │  存储+搜索 │   │  数据处理 │   │  可视化  │                │
│   └─────────┘   └─────────┘   └─────────┘                │
│         ↑                                                    │
│         │                                                    │
│   ┌─────┴─────┐                                           │
│   │  Beats    │  ← 轻量级采集器                            │
│   │ (Filebeat) │                                           │
│   └───────────┘                                           │
│                                                               │
└─────────────────────────────────────────────────────────────┘

组件说明:

组件全称作用
ElasticsearchES存储、搜索、分析
LogstashLS数据收集、处理、转换
KibanaKB数据可视化
Beats-轻量级数据采集

2. 数据流架构

┌─────────────────────────────────────────────────────────────────┐
│                        数据流架构                                │
│                                                                   │
│   日志源                                                          │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐                   │
│   │ 应用日志  │  │ 系统日志  │  │ 网络日志  │                   │
│   └─────┬────┘  └─────┬────┘  └─────┬────┘                   │
│         │               │               │                          │
│         └───────┬───────┴───────┬─────┘                          │
│                 │               │                                  │
│          ┌──────▼──────┐  ┌─────▼─────┐                        │
│          │   Filebeat   │  │ Metricbeat │                        │
│          │  轻量级采集  │  │  指标采集  │                        │
│          └──────┬──────┘  └─────┬─────┘                        │
│                 │               │                                  │
│                 └───────┬───────┘                                  │
│                         │                                          │
│                    ┌────▼────┐                                    │
│                    │  Kafka  │  ← 消息队列(可选)               │
│                    └────┬────┘                                    │
│                         │                                          │
│                    ┌────▼────┐                                    │
│                    │ Logstash │  ← 数据处理                        │
│                    └────┬────┘                                    │
│                         │                                          │
│                    ┌────▼────┐                                    │
│                    │  Elastic │                                    │
│                    │  search  │  ← 数据存储                       │
│                    └────┬────┘                                    │
│                         │                                          │
│                    ┌────▼────┐                                    │
│                    │  Kibana  │  ← 数据可视化                       │
│                    └─────────┘                                    │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘

3. 轻量级架构(Beats 直连)

适合小规模场景,数据直接从 Beats 到 ES:

┌──────────────────────────────────────────┐
│         轻量级架构(Beats 直连)           │
│                                            │
│  Filebeat ──┐                             │
│              │                             │
│  Metricbeat ─┼──→ Elasticsearch ──→ Kibana│
│              │                             │
│  Heartbeat ─┘                             │
│                                            │
└──────────────────────────────────────────┘

适用场景:

  • 小规模部署(< 5 台服务器)
  • 日志量较小(< 10GB/天)
  • 不需要复杂的数据处理

4. 标准架构(Beats + Logstash + ES + Kibana)

适合中等规模,需要数据处理:

┌─────────────────────────────────────────────────────────────────┐
│              标准架构(Beats + Logstash + ES + Kibana)            │
│                                                                   │
│   ┌─────────────┐                                               │
│   │   Beats     │  ← 轻量级采集                                 │
│   │(Filebeat等) │                                               │
│   └──────┬──────┘                                               │
│          │                                                       │
│          ▼                                                       │
│   ┌─────────────┐                                               │
│   │  Logstash   │  ← 数据处理、转换、过滤                        │
│   │ (集群)      │                                               │
│   └──────┬──────┘                                               │
│          │                                                       │
│          ▼                                                       │
│   ┌─────────────┐                                               │
│   │Elasticsearch│  ← 数据存储、搜索                              │
│   │ (集群)      │                                               │
│   └──────┬──────┘                                               │
│          │                                                       │
│          ▼                                                       │
│   ┌─────────────┐                                               │
│   │   Kibana    │  ← 可视化                                      │
│   │             │                                               │
│   └─────────────┘                                               │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘

适用场景:

  • 中等规模部署
  • 需要数据解析、过滤、富化
  • 需要多数据源汇聚

5. 高可用架构(引入 Kafka)

适合大规模、高并发场景:

┌─────────────────────────────────────────────────────────────────┐
│              高可用架构(引入 Kafka)                               │
│                                                                   │
│   数据源                                                        │
│   ┌───────┐ ┌───────┐ ┌───────┐                             │
│   │Server1 │ │Server2 │ │Server3 │                             │
│   └───┬───┘ └───┬───┘ └───┬───┘                             │
│       │          │          │                                    │
│   ┌───▼───┐ ┌───▼───┐ ┌───▼───┐                             │
│   │Filebeat│ │Filebeat│ │Filebeat│                            │
│   └───┬───┘ └───┬───┘ └───┬───┘                             │
│       └──────────┼──────────┘                                  │
│                  │                                               │
│            ┌─────▼─────┐                                        │
│            │   Kafka    │  ← 缓冲、削峰                          │
│            │ (集群)    │                                        │
│            └─────┬─────┘                                        │
│                  │                                               │
│            ┌─────▼─────┐                                        │
│            │  Logstash  │  ← 消费、处理                          │
│            │ (消费者组) │                                        │
│            └─────┬─────┘                                        │
│                  │                                               │
│            ┌─────▼─────┐                                        │
│            │Elasticsearch│                                       │
│            │ (集群)    │                                        │
│            └─────┬─────┘                                        │
│                  │                                               │
│            ┌─────▼─────┐                                        │
│            │  Kibana    │                                        │
│            └────────────┘                                        │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘

Kafka 的作用:

  1. 缓冲:削峰填谷,吸收突发流量
  2. 解耦:生产者和消费者分离
  3. 可靠:消息持久化,保证数据不丢失
  4. 扩展:可以增加多个 Logstash 消费者并行处理

6. 完整数据流详解

6.1 日志采集阶段

数据采集流程:

1. 日志文件被写入磁盘
2. Filebeat 监控文件变化
3. 读取新日志行
4. 添加元数据(主机名、路径等)
5. 发送到目标

6.2 数据处理阶段

Logstash 处理流程:

1. 接收 Beats 发送的数据
2. Filter 处理
   ├─→ Grok:解析日志格式
   ├─→ JSON:解析 JSON
   ├─→ Date:转换时间
   ├─→ GeoIP:添加地理位置
   └─→ Mutate:字段转换
3. 输出到 ES

6.3 数据存储阶段

ES 存储流程:

1. 写入请求到协调节点
2. 根据 routing 计算目标分片
3. 写入主分片
4. 同步到副本
5. 返回确认

6.4 数据可视化阶段

Kibana 可视化流程:

1. 用户访问 Kibana
2. 编写查询(KQL)
3. 发送到 ES
4. ES 执行搜索/聚合
5. Kibana 渲染图表

7. 组件对比

7.1 日志采集器对比

特性FilebeatLogstashFluentd
资源占用
数据处理丰富丰富
插件生态有限丰富丰富
部署复杂度
支持协议ES, Logstash, Kafka多种多种

7.2 数据处理对比

特性LogstashIngest NodeBeats Filter
处理能力
资源消耗
部署位置独立集群ES 节点采集端
延迟极低

8. 容量规划

8.1 集群规划参考

数据量/天ES 节点LogstashKafka场景
< 10GB31-测试/小规模
10-100GB5-102-3可选中等规模
100-500GB10-204-8推荐大规模
> 500GB20+8+必须超大规模

8.2 硬件配置参考

角色CPU内存磁盘说明
ES Data Node8核+32GB+SSD 500GB+数据存储
ES Master Node4核16GB-集群管理
Logstash8核+16GB+-数据处理
Kibana4核8GB-可视化
Kafka Broker8核+16GB+SSD 1TB+消息队列

9. 监控与运维

9.1 监控指标

关键监控指标:

Elasticsearch:
├─ 集群健康状态(green/yellow/red)
├─ 节点状态
├─ 分片分布
├─ 写入吞吐量
├─ 查询延迟
└─ JVM 内存使用

Logstash:
├─ Pipeline 吞吐量
├─ 事件处理延迟
├─ 队列堆积
└─ JVM 内存使用

Beats:
├─ 发送成功率
├─ 采集延迟
└─ 文件处理状态

9.2 告警配置

常见告警:

├─ ES 集群不健康
├─ 节点离线
├─ 磁盘空间不足
├─ 写入拒绝
├─ Logstash 队列堆积
└─ Beats 采集失败

10. 架构演进建议

架构演进路径:

阶段一:小规模(&lt; 10GB/天)
└─→ Beats 直连 ES + Kibana

阶段二:中等规模(10-100GB/天)
└─→ 添加 Logstash 处理
└─→ 添加 Kafka 缓冲

阶段三:大规模(100GB+/天)
└─→ 多 Logstash 消费者
└─→ 冷热分离架构
└─→ ILM 生命周期管理

总结

ELK Stack 的核心价值:

  1. 数据采集:Beats 负责轻量级采集
  2. 数据处理:Logstash 负责数据转换
  3. 数据存储:ES 负责存储和搜索
  4. 数据可视化:Kibana 负责展示

架构选择原则:

  • 小规模:Beats 直连 ES
  • 中等规模:添加 Logstash
  • 大规模:引入 Kafka 作为缓冲

留给你的问题

假设你的公司从单体应用迁移到微服务架构,日志量从 10GB/天增长到 200GB/天。

当前的 ELK 架构会出现什么问题?你会如何演进架构?

需要考虑:

  • 数据采集如何扩展?
  • 数据处理能力如何提升?
  • 如何保证高可用?

基于 VitePress 构建