← 返回 Day 176 正文

Day 176 · 图解

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 日志系统 · 架构图解