Filebeat 是基于 Golang 开发的轻量级日志采集 Agent,其核心架构设计围绕高效、可靠地采集与转发日志数据,主要组件和工作流程如下:
一、核心架构组件 输入 (Inputs)
负责监控指定的日志源(如文件路径、日志文件)。 每个日志源由独立的 Harvester(采集器) 处理。 Harvester(采集器)
职责:逐行读取单个日志文件内容,将数据发送至处理引擎(Libbeat)。 特性: 每个文件分配一个独立 Harvester,确保并发采集。 跟踪文件偏移量(offset),记录在注册表(registry)文件中。 支持文件旋转(Log Rotation),新文件会被重新识别并采集。 通过 close_inactive 参数控制文件句柄释放(默认 5 分钟未更新则关闭)。 注册表 (Registry)
作用:持久化存储文件状态(如路径、inode 号、偏移量)。 位置:默认存储在 .filebeat/registry 目录。 可靠性:重启时恢复采集位置,避免重复或遗漏数据。 处理引擎 (Libbeat)
功能: 聚合多个 Harvester 的事件。 实现数据批量处理、压缩、加密。 管理输出队列和重试机制。 输出 (Outputs)
支持 Elasticsearch、Logstash、Kafka 等目标。 采用 背压敏感协议(Backpressure-sensitive):下游拥堵时自动降速,避免资源耗尽。 二、工作流程 启动阶段: 加载配置的输入(Inputs),扫描指定路径匹配日志文件。 根据注册表恢复历史采集状态。 采集阶段: 为每个新文件启动独立的 Harvester,逐行读取增量内容。 读取数据发送至 Libbeat 引擎。 处理与转发: Libbeat 批量聚合事件,压缩后发送至配置的输出端(如 Elasticsearch)。 成功发送后更新注册表的文件偏移量。 异常处理: 输出失败时自动重试,确保 “至少一次投递” (At Least Once)。 网络恢复后继续传输缓存数据。 三、关键特性 轻量化:资源占用低(CPU/内存可忽略),适合大规模部署。 多行日志处理:自动合并跨行事件(如 Java 异常栈)。 结构化日志支持:解析 JSON 格式日志字段。 模块化:内置 Nginx、MySQL 等日志解析模块,简化配置。 无缝集成 ELK Stack:与 Elasticsearch、Logstash、Kibana 协同工作。 四、典型应用架构 text Copy Code 日志源 → Filebeat(采集) → Kafka(缓冲) → Logstash(过滤) → Elasticsearch(存储) → Kibana(可视化) 此架构通过 Kafka 解耦采集与处理,应对高吞吐场景,保障系统稳定性。
总结:Filebeat 通过 Harvester 实时跟踪文件变化、Registry 确保状态持久化、Libbeat 实现高效聚合与背压控制,提供低资源占用的可靠日志采集方案,是 ELK/EFK 体系中核心的轻量级日志收集器。