LOADING
567 字
3 分钟
ELK
2026-09-20
运开
/
运维
思考

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 是分布式系统的“运行观测面”

之前学过类似这样的链路:

用户态
↓
系统调用
↓
Linux Kernel
↓
驱动 / 网络协议栈
↓
硬件 / 虚拟化层

而在生产系统中,另一条横向链路会贯穿它们:

系统运行
↓
产生事件 / 指标 / 日志
↓
采集与传输
↓
存储 / 索引
↓
查询 / 分析 / 告警
↓
运维人员定位问题
ELK
/tech/distributed/elk/
作者
J.
发布于
2026-09-20
许可协议
CC BY-NC-SA 4.0
编辑于 2026-09-20

部分信息可能已经过时

Profile Image of the Author
J.
我是Jiy,热爱生活的学生一只~
公告
欢迎来到我的博客!
目录
行
器
律
目录