日志中间件:ELK 与 Fluentd
日志中间件就是机房的行车记录仪。出了线上事故,你第一句话就是"查日志"。但几十台服务器,每台上百个日志文件,你一台台 SSH 上去翻?那要翻到天亮。ELK 就是把所有日志收集到一起,能搜、能分析、能画图表。
8.1 ELK Stack:三件套
论ELK 各管什么
E = Elasticsearch:分布式搜索分析引擎,存日志、做搜索。倒排索引,查得飞快。
L = Logstash:数据收集处理管道。从各种来源读日志,过滤、转换、输出到 ES。
K = Kibana:数据可视化平台。在浏览器里搜日志、画图表、做仪表盘。
Filebeat:轻量级日志采集器(Beats 家族),替代 Logstash 做采集,更省资源。生产架构一般是 Filebeat → Logstash → Elasticsearch → Kibana。
8.2 Elasticsearch:倒排索引与查询 DSL
ES 为什么搜得快?因为它用倒排索引——不是"文档→词",而是"词→文档列表"。就像书后面的索引:查"Nginx"出现在第几页,直接翻索引页。
8.3 Logstash:收集过滤管道
Logstash 配置分三段:input(从哪读)→ filter(怎么处理)→ output(写到哪)。grok 插件把非结构化日志文本解析成结构化字段。
8.4 Filebeat:轻量采集
Filebeat 是用 Go 写的轻量级日志采集器,资源占用极小(几十 MB 内存)。每台应用服务器装一个 Filebeat,监控日志文件变化,新行就发到 Logstash。
8.5 Fluentd:CNCF 毕业的统一日志层
Fluentd 是 CNCF 毕业项目,统一日志采集层,Ruby+C 写的,300+ 插件。和 ELK 是互补关系:Fluentd 做采集和转发,ES 做存储和搜索。容器场景(K8s)更常用 Fluent Bit(C 写的轻量版)。
| 对比点 | ELK Stack | Fluentd/Fluent Bit |
|---|---|---|
| 定位 | 采集+存储+搜索+可视化全套 | 采集和转发层 |
| 资源占用 | 重(ES 吃内存) | 轻(Fluent Bit 几 MB) |
| 插件 | 中等 | 极多(300+) |
| 适合 | 日志搜索+可视化大盘 | K8s/容器日志采集 |
① ELK = 行车记录仪:Filebeat 采集 → Logstash 解析 → ES 存储搜索 → Kibana 可视化。
② ES 用倒排索引所以搜得快;Logstash 三段式 input/filter/output;grok 解析非结构化日志。
③ K8s 容器场景用 Fluent Bit(轻量),传统服务器用 Filebeat。