楼层: 首页/ 软件技术/ 中间件全景/ 日志中间件:ELK 与 Fluentd
09

日志中间件:ELK 与 Fluentd

Log Middleware · ELK Stack / Fluentd

日志中间件就是机房的行车记录仪。出了线上事故,你第一句话就是"查日志"。但几十台服务器,每台上百个日志文件,你一台台 SSH 上去翻?那要翻到天亮。ELK 就是把所有日志收集到一起,能搜、能分析、能画图表。

8.1 ELK Stack:三件套

论ELK 各管什么

E = Elasticsearch:分布式搜索分析引擎,存日志、做搜索。倒排索引,查得飞快。

L = Logstash:数据收集处理管道。从各种来源读日志,过滤、转换、输出到 ES。

K = Kibana:数据可视化平台。在浏览器里搜日志、画图表、做仪表盘。

Filebeat:轻量级日志采集器(Beats 家族),替代 Logstash 做采集,更省资源。生产架构一般是 Filebeat → Logstash → Elasticsearch → Kibana。

各服务器日志
Nginx/Tomcat/应用日志
→
Filebeat
轻量采集,监控日志文件
→
Logstash
过滤、解析、转换
Elasticsearch(存储+搜索)
→
Kibana(可视化+搜索界面)

8.2 Elasticsearch:倒排索引与查询 DSL

ES 为什么搜得快?因为它用倒排索引——不是"文档→词",而是"词→文档列表"。就像书后面的索引:查"Nginx"出现在第几页,直接翻索引页。

# 创建索引 PUT /nginx-logs { "mappings": { "properties": { "ip": { "type": "ip" }, "status": { "type": "integer" }, "path": { "type": "keyword" }, "@timestamp": { "type": "date" } } } } # 搜索:查所有 500 错误 GET /nginx-logs/_search { "query": { "bool": { "must": [ { "match": { "status": 500 } }, { "range": { "@timestamp": { "gte": "now-1h" } } } ] } } }

8.3 Logstash:收集过滤管道

Logstash 配置分三段:input(从哪读)→ filter(怎么处理)→ output(写到哪)。grok 插件把非结构化日志文本解析成结构化字段。

# logstash.conf —— Nginx 访问日志解析 input { beats { port => 5044 # 接收 Filebeat 数据 } } filter { grok { # 把 Nginx 日志文本解析成字段 match => { "message" => "%{IP:client_ip} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:path} HTTP/%{NUMBER:http_version}\" %{NUMBER:status}" } } date { match => [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z" ] } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "nginx-logs-%{+YYYY.MM.dd}" } }

8.4 Filebeat:轻量采集

Filebeat 是用 Go 写的轻量级日志采集器,资源占用极小(几十 MB 内存)。每台应用服务器装一个 Filebeat,监控日志文件变化,新行就发到 Logstash。

# filebeat.yml filebeat.inputs: - type: filestream id: nginx-access paths: - /var/log/nginx/access.log output.logstash: hosts: ["localhost:5044"]

8.5 Fluentd:CNCF 毕业的统一日志层

Fluentd 是 CNCF 毕业项目,统一日志采集层,Ruby+C 写的,300+ 插件。和 ELK 是互补关系:Fluentd 做采集和转发,ES 做存储和搜索。容器场景(K8s)更常用 Fluent Bit(C 写的轻量版)。

ELK vs Fluentd 选型
对比点ELK StackFluentd/Fluent Bit
定位采集+存储+搜索+可视化全套采集和转发层
资源占用重(ES 吃内存)轻(Fluent Bit 几 MB)
插件中等极多(300+)
适合日志搜索+可视化大盘K8s/容器日志采集
记
第八章小结

① ELK = 行车记录仪:Filebeat 采集 → Logstash 解析 → ES 存储搜索 → Kibana 可视化。

② ES 用倒排索引所以搜得快;Logstash 三段式 input/filter/output;grok 解析非结构化日志。

③ K8s 容器场景用 Fluent Bit(轻量),传统服务器用 Filebeat。