用 Filebeat 和用 Logstash 推送日志到 Elasticsearch 有什么区别?
Filebeat 侧重采集与轻量处理,Logstash 提供更广的解析、转换和富化能力;两者资源占用都取决于负载与配置。典型架构是 Filebeat 采集 + Logstash 处理 + ES 存储。本文讲清两者分工与选型。
一句话分工:Filebeat 是轻量采集器(读文件、转发,支持轻量处理);Logstash 是重型管道(grok 解析、字段增删、富化、多路输出)。资源紧张的采集端用 Filebeat,需要复杂清洗的中间层用 Logstash。
对比表
| 维度 | Filebeat | Logstash |
|---|---|---|
| 定位 | 轻量日志采集器 | 数据处理管道 |
| 资源占用 | Go 实现,通常较轻,取决于负载和配置 | JVM 实现,需按管道和负载测量 |
| 解析能力 | 基础(dissect、JSON 等;grok 可放到 ES ingest pipeline) | 完整(grok/mutate/ruby…) |
| 背压处理 | 有(对下游反压) | 有(队列) |
| 多输出 | 单输出 | 多输出 |
典型组合
Filebeat(每台机器,采集) → Logstash(集中清洗) → ES → Kibana
流量小、日志结构化良好(JSON)时 Filebeat 直连 ES 也完全可行。
常见问题(FAQ)
Q:Filebeat 能完全替代 Logstash 吗? JSON 日志等无需复杂处理的场景可以;需要多路输出、重度转换时仍需 Logstash 或等价层。
Q:Filebeat→Logstash 之间会丢吗? Filebeat 通过 ACK 与重试支持至少一次交付,但可能重复;源文件过早轮转/删除、状态和队列丢失等仍可造成丢失,不能承诺零丢失。