linux-tutorial 实战:Elastic 技术栈 Filebeat 日志采集器安装、配置与原理全解
【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial
导读:本文以本仓库 docs/linux/soft/elastic/elastic-beats.md 为主线,系统讲解 Elastic 技术栈中的数据中转代理 Beats(重点为 Filebeat)——从四种主流 Beats 类型的选型、Filebeat 的轻量级设计思想,到 tar 包安装、
filebeat.yml核心配置项、启动命令、预构建模块,再到 harvester / prospector / 注册表文件三层工作原理。同时结合仓库内 codes/linux/soft/elk/ 下的真实配置与一键脚本,给出可直接落地的 ELK 日志采集实战方案。读完本文,你将能够独立完成 Filebeat 的安装部署、日志接入(直连 Elasticsearch 或经 Logstash 中转)、多行日志处理、模块化采集与仪表板加载。
一、Beats 是什么:安装在服务器上的数据中转代理
Beats 是 Elastic 公司提供的安装在服务器上的数据中转代理(data shipper)。它的定位是单一用途、轻量级的采集端,负责从各业务服务器采集数据,并将数据直接传输到 Elasticsearch,或传输到 Logstash(由 Logstash 做进一步加工后再写入 Elasticsearch)。
在 Elastic 技术栈的整体架构中,数据流向通常为:
业务服务器日志 → Beats(Filebeat) → Logstash(可选,负责解析/过滤) → Elasticsearch(存储/检索) → Kibana(可视化)Beats 并不是 ELK 架构中不可或缺的一环(可参考 docs/linux/soft/elastic/elastic-quickstart.md 中的架构说明),但当采集端数量众多、采集类型复杂时,引入 Beats 可以大幅降低 Logstash 与 Elasticsearch 的负载,并简化日志收集的部署方式。
Beats 的常见类型
Beats 有多种类型,可以根据实际应用需要选择合适的类型。常用类型如下:
| 类型 | 用途 |
|---|---|
| Packetbeat | 网络数据包分析器,提供应用程序服务器之间交换的事务信息(网络协议级监控) |
| Filebeat | 从服务器上读取并发送日志文件 |
| Metricbeat | 服务器监视代理程序,定期从服务器上运行的操作系统和服务收集指标(CPU、内存等) |
| Winlogbeat | 提供 Windows 事件日志采集 |
说明:社区还提供了更多 Beats 类型(即 community-beats),可覆盖数据库、消息队列、安全等更多场景。鉴于实际工作中主要应用 Filebeat,后续内容仅深入介绍 Filebeat。
Filebeat 的作用
相比 Logstash,Filebeat 更加轻量化,专为日志文件采集而设计。其核心特性:
- 断点续传(有状态读取):在任何环境下,应用程序都有停机的可能性。Filebeat 读取并转发日志行时,如果中断,则会记住所有事件恢复联机状态时所在的位置,恢复后从上次记录点继续读取,避免重复或丢失。
- 内置通用模块:Filebeat 带有内部模块(auditd、Apache、Nginx、System 和 MySQL),可通过一个指定命令来简化通用日志格式的收集、解析和可视化。
- 背压保护(不使管道超负荷):Filebeat 向 Logstash 传输数据时,如果 Logstash 忙于处理数据,会通知 Filebeat 放慢读取速度;一旦拥塞得到解决,Filebeat 将恢复到原来的速度并继续传播。这一机制有效避免采集端压垮处理端。
二、安装 Filebeat
2.1 tar 包安装(通用方式)
Unix / Linux 系统建议使用 tar 包方式安装,因为比较通用(不依赖发行版包管理器):
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.1-linux-x86_64.tar.gz tar -zxf filebeat-6.1.1-linux-x86_64.tar.gz解压后即得到filebeat-6.1.1-linux-x86_64目录,其中的可执行文件filebeat与默认配置文件filebeat.yml即为我们操作的对象。
2.2 仓库内的一键安装脚本
仓库提供了两个可直接参考的安装脚本:
- codes/linux/soft/elk/install_filebeat.sh:filebeat 5.6.1 / 6.1.3 / 6.3.2 版本选择式安装脚本。脚本会以 root 权限完成:下载源码包 → 解压到
/usr/local/→ 建立软链接ln -s /usr/local/filebeat-<version> /usr/local/filebeat→ 写入环境变量/etc/profile.d/filebeat.sh→ 并自动生成一个最简配置文件:
filebeat.prospectors: - input_type: log paths: - /var/log/*.log output.logstash: hosts: ["127.0.0.1:5044"]- codes/linux/soft/elk/install-elk.sh:一键式安装 ELK 全套组件(elasticsearch / logstash / kibana / filebeat,版本统一为 6.1.1)的脚本。其中
installFilebeat()函数从官方 artifacts 地址下载 filebeat 压缩包并解压,replaceFilebeatConfig()则下载 codes/linux/soft/elk/config/filebeat.yml 并用当前设备 IP 替换其中的127.0.0.1占位地址。
注意:ELK 三件套 + Beats 建议统一版本,避免因版本不一致导致组件间通讯异常(详见 docs/linux/soft/elastic/elastic-quickstart.md 的安装提示)。
三、配置文件 filebeat.yml
3.1 配置文件位置与格式
filebeat.yml是 filebeat 的配置文件,配置文件的路径会因为你安装方式的不同而变化(tar 包解压目录、rpm/deb 安装路径/etc/filebeat/等)。请以实际安装方式为准。
Beat 全系列产品的配置文件都基于YAML格式,Filebeat 自然也不例外。YAML 采用缩进表达层级,配置时务必注意缩进一致性(不要混用 Tab 与空格)。
filebeat.yml 部分配置示例(多行日志合并场景):
filebeat: prospectors: - type: log paths: - /var/log/*.log multiline: pattern: '^[' match: after3.2 仓库内完整配置示例解读
仓库中的 codes/linux/soft/elk/config/filebeat.yml 是一份带详尽注释的实战配置文件,覆盖了上述文档中所有关键配置项,可直接作为模板。其中值得重点关注的增强配置包括:
- prospector 级别过滤:
filebeat.prospectors: - type: log enabled: true paths: - /home/zp/log/*.log # 排除匹配正则的行(如排除 DEBUG 日志) #exclude_lines: ['^DBG'] # 仅收集匹配正则的行(如只收集 ERROR 与 WARN) #include_lines: ['^ERR', '^WARN'] # 排除匹配正则的文件(如排除 .gz 压缩文件) #exclude_files: ['.gz$']- 多行日志(multiline):用于处理跨多行的日志,常见于 Java 堆栈异常(Stack Trace)。
multiline.pattern指定需要匹配的正则,multiline.negate决定是否对模式取反(默认 false),multiline.match: after表示匹配成功后将其后不匹配的行合并到该事件中(Logstash 中after等价于previous,before等价于next):
multiline.pattern: ^\[ multiline.negate: false multiline.match: after自定义字段与标签:
fields与tags会随事件一起输出,便于后续按服务、环境维度过滤。该示例中配置了fields.profile: development。模块目录配置:
filebeat.config.modules通过 glob 模式(${path.config}/modules.d/*.yml)加载模块配置,并支持热加载(reload.enabled: true)。日志级别:
logging.selectors: ["*"]配合 debug 级别可输出 publish、beat 等组件的详细日志,便于排查采集问题。
提示:Filebeat 软件包通常会附带一份
filebeat.reference.yml(全量配置参考文件),包含所有受支持选项及注释,配置时可对照查阅。
四、重要配置项详解
4.1 filebeat.prospectors(文件监视器)
用于指定需要关注的文件。每个-开头的是一个 prospector,可同时定义多个 prospector 以适配不同路径、不同类型、不同多行规则的文件。
示例:
filebeat.prospectors: - type: log enabled: true paths: - /var/log/*.logtype指定采集类型(日志采集为log);enabled: true启用该 prospector;paths支持 glob 通配符,可配置多个路径。若想为一个 prospector 配置多条路径,可直接追加列表项,例如:
filebeat.prospectors: - type: log paths: - /var/log/*.log - /var/path2/*.log4.2 output.elasticsearch(直接输出到 Elasticsearch)
如果希望使用 filebeat 直接向 Elasticsearch 输出数据,配置output.elasticsearch:
output.elasticsearch: hosts: ["192.168.1.42:9200"]hosts为 Elasticsearch 节点地址数组,可配置多个节点实现负载与容错。若 Elasticsearch 开启认证,还需配置username/password。
4.3 output.logstash(经 Logstash 中转输出)
如果希望 filebeat 先向 Logstash 输出数据,由 Logstash 加工后再向 Elasticsearch 输出,则配置output.logstash:
output.logstash: hosts: ["127.0.0.1:5044"]推荐:相比直接向 Elasticsearch 输出,个人更推荐向 Logstash 输出。因为 Logstash 与 Filebeat 一起工作时具备背压机制——Logstash 繁忙时会通知 Filebeat 放慢读取速度,拥塞缓解后 Filebeat 自动恢复原速,从而减少管道超负荷的风险。同时 Logstash 还能承担 grok 解析、字段清理等加工职责(参见 docs/linux/soft/elastic/elastic-logstash.md)。
除了 filebeat 侧,还需要在 Logstash 的配置文件(如logstash.conf)中指定beats input 插件,监听与 filebeat.yml 中相同端口(示例为 5044):
input { beats { port => 5044 # 此端口需要与 filebeat.yml 中的端口相同 } } # The filter part of this file is commented out to indicate that it is # optional. # filter { # # } output { elasticsearch { hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }其中输出索引index使用[@metadata]中携带的 beat 名称、版本与日期动态生成(形如filebeat-6.1.1-2026.09.16),实现按天分索引。仓库内另一份 codes/linux/soft/elk/config/logstash.conf 展示了 tcp input(端口 9251、json_linescodec)直接写入 Elasticsearch 的写法,可对比理解 input 插件(beats / tcp / file 等)的差异。
4.4 setup.kibana(Kibana 连接配置)
如果打算使用 Filebeat 提供的 Kibana 仪表板,需要配置setup.kibana,用于 Filebeat 与 Kibana 交互(加载仪表板、索引模式等):
setup.kibana: host: "localhost:5601"4.5 setup.template.settings(索引模板设置)
在 Elasticsearch 中,**索引模板(index template)**用于定义索引的设置(settings)和映射(mapping),决定字段如何被分析、以何种类型存储。
在 Filebeat 中,setup.template.settings用于配置索引模板。Filebeat 推荐的索引模板文件由 Filebeat 软件包安装。如果接受 filebeat.yml 配置文件中的默认配置,Filebeat 在成功连接到 Elasticsearch 后会自动加载模板。你也可以通过配置模板加载选项来禁用自动模板加载,或加载自己的模板,还可以设置选项来更改索引和索引模板的名称。
仓库示例配置中给出:
setup.template.settings: index.number_of_shards: 3 #index.codec: best_compression #_source.enabled: false这里将新索引的主分片数(number_of_shards)设为 3;index.codec: best_compression可开启更优的压缩比(以 CPU 换取存储空间)。
说明:如无必要,使用 Filebeat 配置文件中的默认索引模板即可。
4.6 setup.dashboards(Kibana 仪表板加载)
Filebeat 附带了示例 Kibana 仪表板。使用前需要先创建索引模式filebeat-*,并将仪表板加载到 Kibana。有两种方式:运行setup命令,或在filebeat.yml配置文件中开启仪表板加载开关。
在filebeat.yml中启用仪表板加载:
setup.dashboards.enabled: true仓库配置示例 codes/linux/soft/elk/config/filebeat.yml 中即启用了该选项,并指出从 Beats 6.0.0 起仪表板通过Kibana API加载,因此必须配合上一节的setup.kibana配置一起使用。
五、Filebeat 命令
filebeat 提供了一系列命令来完成各种功能。执行命令的统一方式:
./filebeat COMMAND说明:命令行参数没有必要一一掌握,因为绝大部分功能都可以通过配置来完成;且通过命令行指定功能要求每次输入同样参数,不利于固化启动方式。
最重要的命令是启动命令run。示例:指定配置文件、以前台方式运行,并开启publish组件的调试日志:
./filebeat run -e -c filebeat.yml -d "publish" ./filebeat -e -c filebeat.yml -d "publish" # run 可以省略各参数含义:
| 参数 | 含义 |
|---|---|
run | 启动 filebeat(默认命令,可省略) |
-e | 日志输出到 stderr(前台运行时可实时看到日志) |
-c <file> | 指定配置文件路径 |
-d <selectors> | 启用指定组件的调试日志,"publish"表示查看事件发布环节日志 |
仓库中的 codes/linux/soft/elk/boot-elk.sh 给出了生产环境常用的后台守护启动方式:
nohup ${FILEBEAT_PATH}/filebeat -e -c ${FILEBEAT_PATH}/filebeat.yml -d "publish" >> ${FILEBEAT_PATH}/nohup.out 2>&1 &脚本通过app=filebeat oper=start|stop两个参数控制,stop时使用ps -ef | grep找到进程并 kill。这与 Logstash 的 nohup 守护方式一致(可对照 docs/linux/soft/elastic/elastic-logstash.md 的小技巧章节)。
六、Filebeat 模块
Filebeat 提供了一套预构建模块,让你可以快速实施和部署日志监视解决方案,并附带示例仪表板和数据可视化。这些模块支持常见的日志格式,例如 Nginx、Apache2、MySQL、System 等,省去了手写正则解析的繁琐工作。
运行模块的步骤
步骤一:配置 elasticsearch 和 kibana
在 filebeat.yml 中配置输出与 Kibana 连接(username/password是可选的,不需要认证则不填):
output.elasticsearch: hosts: ["myEShost:9200"] username: "elastic" password: "elastic" setup.kibana: host: "mykibanahost:5601" username: "elastic" password: "elastic"步骤二:初始化环境
执行setup命令,filebeat 会加载推荐索引模板(并在配置了 dashboards 时加载仪表板):
./filebeat setup -e步骤三:指定模块启动
执行下面命令,指定希望加载的模块(此处为 system、nginx、mysql 三个模块):
./filebeat -e --modules system,nginx,mysql提示:模块的启用状态也可通过
modules.d/目录下的*.yml配置持久化,并由filebeat.config.modules统一加载与热更新(见仓库配置示例 codes/linux/soft/elk/config/filebeat.yml)。
七、Filebeat 工作原理
Filebeat 有两个主要组件:harvester与prospector,配合**注册表文件(registry file)**共同保障日志的有序、完整采集。
7.1 harvester(收割器)
harvester 负责读取一个文件的内容。它会逐行读取文件内容,并将内容发送到输出目的地。每个被监视的文件对应一个 harvester,harvester 负责管理文件的打开、读取与关闭(包括文件轮转场景)。
7.2 prospector(探测器)
prospector 负责管理 harvester 并找到所有需要读取的文件源。例如类型是log时,prospector 就会遍历指定路径下的所有匹配要求的文件,并为每个文件启动一个 harvester。
filebeat.prospectors: - type: log paths: - /var/log/*.log - /var/path2/*.log7.3 注册表文件与状态管理
Filebeat 保持每个文件的状态,并经常刷新注册表文件中的磁盘状态。状态用于记住 harvester 正在读取的最后偏移量(offset),并确保发送所有日志行——这正是"断点续传"能力的来源:进程重启、网络中断后,Filebeat 依据注册表恢复读取位置。
至少一次投递(at-least-once):Filebeat 将每个事件的传递状态存储在注册表文件中,保证事件至少传递一次到配置的输出,没有数据丢失(在极端场景下可能重复投递,但不会丢失)。
八、延伸阅读
- Elastic 技术栈入门指南:了解 ELK 整体架构、Elasticsearch / Logstash / Kibana 安装与数据流向
- Elastic 技术栈之 Logstash 基础:Logstash 的 input / filter / output / codec 插件体系及文件采集实战
- Elastic 技术栈总览:ELK 技术栈概念与资源汇总
- codes/linux/soft/elk/config/filebeat.yml:带全量注释的 filebeat 实战配置模板
- codes/linux/soft/elk/boot-elk.sh:elasticsearch / logstash / kibana / filebeat 统一启停脚本
- codes/linux/soft/elk/install_filebeat.sh 与 codes/linux/soft/elk/install-elk.sh:filebeat 及 ELK 全家桶的一键安装脚本
【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考