567 字
3 分钟
ELK
运开
/
运维 /
思考 ELK
flowchart TD
A["E — Elasticsearch<br><font color='gray'>分布式搜索与分析引擎。</font><br><font color='gray'>负责索引、查询、聚合、分片与副本等。</font>"]
B["L — Logstash<br><font color='gray'>日志数据处理管道。</font><br><font color='gray'>接收数据、解析格式、转换字段、过滤和输出。</font>"]
C["K — Kibana<br><font color='gray'>Elastic 生态中的可视化和分析界面。</font><br><font color='gray'>搜索日志、制作图表、查看仪表盘、配置相关分析功能。</font>"]
A ~~~ B ~~~ C
日志系统架构图
通用的数据流模型:
flowchart TD
A["日志产生端<br>Nginx · Go · Java · Linux · Kubernetes"]
B["采集 Agent<br>读取文件、系统日志、容器输出"]
C["Logstash / Collector (可选)<br>解析 · 转换 · 丰富 · 过滤"]
D["Elasticsearch<br>索引 · 存储 · 查询 · 聚合"]
E["Kibana<br>查询 · 图表 · Dashboard · 分析"]
A --> B --> C --> D --> E
Elastic 经典参考架构:
flowchart LR
B1[Filebeat] --> L[Logstash]
B2[Metricbeat] --> L
B3[Packetbeat] --> L
L --> ES[Elasticsearch]
ES --> K[Kibana]
Beats(采集) + Logstash(聚合/转换) + Elasticsearch(存储/检索) + Kibana(可视化)
这通常被称作为 ELK + Beats 架构(早期也叫 ELK Stack,现在官方统称 Elastic Stack)
具体实施思考
Beats 的细分?
我们可以看到 官方 给出了 6种 Beats
- FileBeat
- Metricbeat
- Packetbeat
- Winlogbeat
- Auditbeat
- Heartbeat
查找得知,经常使用的比如File、Metric、Packet
为什么需要 Logstash?
可能会想,既然用了 Beats,为什么不直接写到 ES中?
我认为是需要防止 ES被击垮,通过 Logstash作为多目标的输出、消息队列的缓冲
在其中进行复杂的正则解析、字段清洗
高可用、性能
既然作为多目标的输出,那就需要考虑高可用和性能
Logstash 的节点,ES 的规模,数据分片的策略
以及是否需要在 Logstash前面加上 Kafka 或 Redis作为缓冲,防止 Logstash 崩溃
ELK与分布式系统的关系
ELK 是分布式系统的“运行观测面”
之前学过类似这样的链路:
1用户态2 ↓3系统调用4 ↓5Linux Kernel6 ↓7驱动 / 网络协议栈8 ↓9硬件 / 虚拟化层而在生产系统中,另一条横向链路会贯穿它们:
1系统运行2 ↓3产生事件 / 指标 / 日志4 ↓5采集与传输6 ↓7存储 / 索引8 ↓9查询 / 分析 / 告警10 ↓11运维人员定位问题 编辑于 2026-09-20
部分信息可能已经过时