ELK Stack 通俗指南:日志江湖的“神探组合”
ELK 最初只有三个成员,后来加了一个小弟(Beats),所以现在有时也叫。ELK 是给程序员看病的显微镜。没有 ELK,查 Bug 靠猜和翻文件;有了 ELK,查 Bug 靠搜。它是目前业内日志中心的标配。
·
ELK Stack 通俗指南:日志江湖的“神探组合”
ELK 不是一个软件,而是一个技术栈组合。
它是目前互联网公司用来处理日志(Logs) 的事实标准。
如果你的系统报错了,老板问:“昨天晚上 3 点是谁在攻击我们的接口?”,你不需要去几十台服务器上一台台 grep 日志,只需要打开 ELK。
1. 成员介绍 (复仇者联盟)
ELK 最初只有三个成员,后来加了一个小弟(Beats),所以现在有时也叫 Elastic Stack。
A. Elasticsearch (大脑)
- 角色:仓库管理员 + 超级图书管理员。
- 职责:负责存数据和搜数据。
- 能力:它用“倒排索引”技术,让你在几亿条日志里搜一个词,只需要几毫秒。
- (详见 Elasticsearch Wiki)
B. Logstash (输油管 - 老师傅)
- 角色:加工厂流水线。
- 职责:负责收集、清洗、转换数据。
- 场景:
- 日志里的日期格式是
2026/01/22,ES 想要2026-01-22,Logstash 帮你改。 - 日志里有敏感的“身份证号”,Logstash 帮你把中间打上星号
****再存库。 - 缺点:它是用 Java 写的,比较重,跑起来有点吃内存。
- 日志里的日期格式是
C. Kibana (面子 - 颜值担当)
- 角色:仪表盘 / 可视化界面。
- 职责:把枯燥的数据变成图表。
- 场景:
- 你不会写复杂的查询代码?没关系,在 Kibana 搜索框里输入
status: 500,它自动帮你列出所有服务器错误。 - 它可以画饼图(访问来源分布)、柱状图(流量趋势)、地图(攻击者IP分布)。
- 你不会写复杂的查询代码?没关系,在 Kibana 搜索框里输入
D. Beats (快递员 - 小弟)
- 角色:轻量级采集器。
- 职责:安装在每一台业务服务器上,只负责搬运日志,不负责处理。
- 为什么需要它?:因为 Logstash 太重了,装在业务服务器上会抢资源。所以派 Beats(用 Go 写的,很轻)去采集,采集完发给 Logstash 或直接发给 ES。
- Filebeat:搜集日志文件。
- Metricbeat:搜集 CPU/内存指标。
2. 经典工作流:日志的一生
假设你有一个电商网站,用户访问了一次首页,报错了。
- 产生:Nginx 服务器生成一行日志:
[Error] 500 Internal Server Error ...写入到本地文件/var/log/nginx/error.log。 - 搬运 (Beats):安装在服务器上的 Filebeat 监听到文件变了,立马把这行新日志抓起来,发出去。
- 加工 (Logstash):Logstash 收到日志,把它切分成字段:
time: 10:00level: Errorcode: 500- 然后发给 ES。
- 存储 (Elasticsearch):ES 收到数据,建立索引,存入硬盘。
- 展示 (Kibana):运维人员上班了,打开 Kibana 网页。
- 仪表盘上一个红灯亮了:“今日 500 错误飙升”。
- 运维点击红灯,看到了具体的报错日志堆栈,发现是空指针异常。
3. ELK vs Prometheus + Grafana
这也是面试常考题。都是监控,有啥不一样?
| 特性 | ELK Stack | Prometheus + Grafana |
|---|---|---|
| 侧重点 | 日志 (Logs) | 指标 (Metrics) |
| 数据样貌 | 文本。比如 “User login failed: uid 123” | 数字。比如 “CPU Usage = 80%” |
| 排查深度 | 深。能告诉你为什么挂了(具体的报错信息、堆栈)。 | 浅。只能告诉你挂了,或者快挂了。 |
| 存储成本 | 极高。存全量文本,非常占硬盘。 | 低。存的是压缩后的数字时间序列。 |
| 最佳实践 | 出了问题去 ELK 查细节。 | 平时盯着 Grafana 看趋势和报警。 |
4. 总结
- ELK 是给程序员看病的显微镜。
- 没有 ELK,查 Bug 靠猜和翻文件;有了 ELK,查 Bug 靠搜。
- 它是目前业内日志中心的标配。
更多推荐
所有评论(0)