Logstash 与 Filebeat
在 ELK Stack 中,Filebeat 和 Logstash 构成了日志采集与处理的数据管道。Filebeat 负责从应用服务器上收集日志文件,Logstash 负责对日志进行解析、过滤、转换后发送到 Elasticsearch。两者配合,既保证了采集的轻量级(Filebeat),又提供了处理的灵活性(Logstash)。
对于简单场景,两者可以独立使用:Filebeat 可以直接发送日志到 Elasticsearch;Logstash 也可以直接从文件读取。但大多数生产环境推荐使用两者的组合,因为 Filebeat 的 Module 机制和 Logstash 的 Filter 插件生态,可以覆盖绝大多数日志处理需求。
Filebeat 的优势与局限
Filebeat 是 Elastic 官方推出的轻量级日志采集器,相比 Logstash 的文件输入插件,Filebeat 有几个显著优势:资源占用低,Go 语言编写,运行时内存通常在 50MB 以内;内置常用 Module,预配置了 Nginx、Apache、MySQL 等常见日志的解析规则;可靠性高,支持 ACK 确认机制,确保日志被成功发送后才标记为已发送。
Filebeat 的局限在于处理能力有限:它的 Filter 机制不如 Logstash 强大,复杂的数据转换(如多步条件处理、正则分组提取)仍然需要 Logstash。Filebeat 适合作为数据管道的「第一棒」,将日志收集和简单解析的任务承担起来。
Logstash 的处理管道
Logstash 的处理管道分为三个阶段:Input(输入)、Filter(过滤/转换)、Output(输出)。每个阶段都可以配置多个插件,插件之间通过队列(默认是内存队列,生产环境推荐 Kafka 或 Redis)解耦。
Filter 是 Logstash 的核心能力。常用插件包括:grok 用于正则解析,将非结构化日志提取为结构化字段;date 用于时间戳解析,将日志中的时间字符串转换为 @timestamp;mutate 用于字段操作(重命名、删除、类型转换);json 用于 JSON 格式解析。
组合策略
推荐的部署策略是:Filebeat 部署在每个应用服务器上,负责日志文件监控和基础解析;Logstash 部署在独立服务器上(或 Kubernetes 中),负责接收所有 Filebeat 的数据,进行深度处理和路由。
这种架构的优势:Filebeat 的轻量不影响应用服务器性能;Logstash 的处理能力可以弹性扩展;可以集中配置日志处理规则,便于统一管理;Filebeat 和 Logstash 之间通过 Beats 协议通信,支持 TLS 加密和负载均衡。