一、功能概述
Filebeat 的主要功能包括:
- 日志监控:实时监控指定路径下的日志文件或管道(如
/var/log
目录、Docker 日志),跟踪文件新增内容或滚动(rollover)情况。 - 日志读取:按照预定义的读取模式(如按行、按多行模式)读取日志事件,避免重复或遗漏。
- 数据发送:将收集到的日志数据发送至目标系统,如 Elasticsearch、Logstash、Kafka、Cloudwatch 等,支持直接发送或通过 HTTP/HTTPS 协议发送。
- 数据加工:在发送前对日志数据进行基础的处理,如添加元数据(如主机名、文件路径)、清理无关字符、提取特定字段等。
- 状态管理:记录已读取文件的位置信息,即使 Filebeat 进程重启,也能从上次中断处继续读取,保证数据完整性。
二、工作原理
-
Prospector:Filebeat 的核心组件,负责发现和追踪日志文件。Prospector 可以配置为监视特定目录、单个文件或管道。当检测到新文件、文件更新或文件滚动时,Prospector 会启动对应的 Harvester。
-
Harvester:每个 Harvester 负责读取单个日志文件的内容。它按设定的读取模式(如按行)读取日志事件,并将事件发送给 Publisher。Harvester 记录已读取到的文件偏移量,以便在进程重启后能准确恢复。
-
Publisher:接收来自 Harvester 的日志事件,对其进行初步处理(如添加元数据、执行处理器链),并将事件批量发送到 Output。Publisher 采用内部队列来缓冲数据,以减少频繁发送请求。
-
Output:负责将日志事件发送到目标系统。Filebeat 提供多种内置 Output 插件,如 Elasticsearch、Logstash、Kafka、AWS CloudWatch Logs 等。用户可以根据需要选择或自定义 Output。
三、配置详解
Filebeat 的配置通常通过 filebeat.yml
文件完成。关键配置项包括:
-
Inputs(输入):
- Paths:指定要监视的日志文件或目录。
- Exclude_lines 和 Include_lines:通过正则表达式过滤日志行。
- Multiline:配置多行模式,将连续相关的日志行合并为一个事件。
-
Processors(处理器):
- Add_host_metadata、Add_cloud_metadata:自动添加主机或云环境元数据。
- Decode_json_fields、Decode_csv:解析日志中的 JSON 或 CSV 数据。
- Drop_fields、Rename_fields:删除或重命名字段。
-
Outputs(输出):
- Elasticsearch:配置连接 Elasticsearch 的地址、索引名、模板等。
- Logstash:指定 Logstash 服务器地址、端口和协议。
- Kafka:配置 Kafka 服务器地址、主题、生产者选项等。
-
Shipper(发送器):
- Queue:设置内部队列的大小、过期时间等参数,控制数据缓冲和重试策略。
- Logging:配置 Filebeat 的日志级别、路径等。
四、高级特性
-
Conditional processing:通过 Conditionals 语句,根据日志内容或元数据有条件地启用或禁用特定处理器或 Output。
-
Autodiscover:自动检测 Kubernetes、Docker、ECS 等环境中的日志源,并动态配置 Prospector。
-
Modules:预配置的模块,针对特定应用(如 Apache、Nginx、MySQL 等)的日志格式提供开箱即用的采集、解析和可视化方案。
-
TLS/SSL:支持通过 TLS/SSL 加密与 Output 之间的通信,保障数据传输安全。
-
Load balancing and failover:在多个 Output 之间实现负载均衡或故障转移。
五、监控与管理
-
Metrics:Filebeat 自带 metrics 输出,可将运行状态、性能统计数据发送至 Prometheus、Elasticsearch 等监控系统。
-
Status API:提供 RESTful API,用于查询 Filebeat 的运行状态、配置、Harvester 信息等。
-
Builtin dashboards:在 Kibana 中提供了 Filebeat 相关的仪表板,用于可视化监控 Filebeat 的运行状态和性能。
六、最佳实践
- 合理设置 Prospector 监视范围,避免不必要的文件扫描。
- 优化 Harvester 配置,如根据日志格式选择合适的读取模式、适当调整多行模式参数。
- 使用 Processor 进行轻量级数据清洗,减少下游处理负担。
- 配置合理的 Output 参数,如批量大小、超时时间,以平衡数据发送效率和可靠性。
- 定期检查和更新 Filebeat 版本,以利用新特性、修复问题和提升性能。