ELK 日志系统架构图解
Day 176 · ELK 日志系统
这张图展示了从业务服务器日志产出到最终在 Kibana 中可视化的完整链路。
完整链路图(ASCII)
┌──────────────────────────────────────────────────────────────────────┐
│ 业务服务器集群 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Web-01 │ │ Web-02 │ │ App-01 │ ... │
│ │ nginx │ │ nginx │ │ flask │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ logs │ logs │ logs │
│ ┌────▼─────────────▼─────────────▼─────┐ │
│ │ Filebeat (每个节点) │ │
│ └────────────────────┬─────────────────┘ │
└───────────────────────┼────────────────────────────────────────────┘
│ syslog/HTTP
▼
┌──────────────────────────────────────────────────────────────────────┐
│ 采集层 │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Logstash A │ │ Logstash B │ │ Kafka │ │
│ │ (管道加工) │ │ (管道加工) │ │ (缓冲队列) │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ └─────────────────────┼───────────────────┘ │
│ ▼ │
└─────────────────────────────────┼────────────────────────────────────┘
│ 写入
▼
┌──────────────────────────────────────────────────────────────────────┐
│ 存储层 │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Elasticsearch 集群 │ │
│ │ │ │
│ │ Node-1 Node-2 Node-3 │ │
│ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │ │shard │ │shard │ │shard │ ← 主分片 │ │
│ │ │ 03 │ │ 01 │ │ 02 │ │ │
│ │ └──┬───┘ └──┬───┘ └──┬───┘ │ │
│ │ │replica │replica │replica │ │
│ │ ┌──▼───┐ ┌──▼───┐ ┌──▼───┐ │ │
│ │ │shard │ │shard │ │shard │ ← 副本分片 │ │
│ │ │ 03 │ │ 01 │ │ 02 │ │ │
│ │ └──────┘ └──────┘ └──────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────┘
│ 查询
▼
┌──────────────────────────────────────────────────────────────────────┐
│ 展示层 │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Kibana │ │
│ │ Dashboard │ Discover │ Visualize │ Dev Tools │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────┘
倒排索引原理图
传统索引(正排):
┌────────┬───────────────────┐
│ doc_id │ content │
├────────┼───────────────────┤
│ 1 │ "error occurred" │
│ 2 │ "warning issued" │
│ 3 │ "error fixed" │
└────────┴───────────────────┘
查 "error" → 扫 3 行
倒排索引:
"error" → [1, 3]
"occurred"→ [1]
"warning" → [2]
"issued" → [2]
"fixed" → [3]
查 "error" → 直接 [1,3],O(1)
Logstash pipeline 数据流
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐
│ input │ ──► │ filter │ ──► │ mutate │ ──► │ output │
│ (文件) │ │ (grok) │ │ (重命名)│ │(ES + stdout)│
└─────────┘ └─────────┘ └─────────┘ └─────────────┘
│ │
raw text {clientip, request, response, ...}
{message}
Docker Compose 网络拓扑
┌─────────────────────────────────────────────┐
│ Docker Compose 网络 │
├──────────────┬──────────────┬──────────────┤
│ elasticsearch│ logstash │ kibana │
│ 9200 │ │ 5601 │
│ │ 5044 │ │
├──────────────┴──────────────┴──────────────┤
│ elk-net (内部桥接网络) │
└─────────────────────────────────────────────┘
端口映射:
- 9200: Elasticsearch HTTP API
- 5601: Kibana Web 界面
- 5044: Logstash Beats 输入(如 Filebeat)
索引分片与副本示意图
索引: logs-2026.10.06
分片数: 3
副本数: 1
Node-1: Node-2: Node-3:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 主分片 0 │ │ 主分片 1 │ │ 主分片 2 │
│ 副本分片 1 │ │ 副本分片 2 │ │ 副本分片 0 │
└─────────────┘ └─────────────┘ └─────────────┘
主分片提供写入和读取能力,副本分片提供冗余和读取扩展能力。
Day 176 · ELK 日志系统 · 架构图解