ElasticStack Beats数据采集
Logstash太费内存,如果在要采集的服务上都安装,这样资源消耗非常高,所以我们要用轻量级的采集工具如(Beats)才更高效,更省资源。
参考文章:
Beats
简介
Beats 是 Elastic Stack 提供的一组轻量级数据采集器,负责从各种来源采集数据,然后将数据发送到 Elasticsearch 或 Logstash。这些小工具非常轻巧,占用系统资源少,适用于海量的分布式环境。Beats官方文档地址
Beats在实现时选择了Golang,Golang的高效内存管理、简洁语法和并发处理能力,使 Beats 在保证低资源消耗的前提下,提供强大的数据采集和传输能力。
- Golang是编译型语言,它编译后的二进制文件无需依赖虚拟机,因此在资源消耗和启动速度上都比Java更有优势。
 - Golang的跨平台特性使得Beats能够原生支持Linux、Windows和macOS等多个操作系统,减少了开发和部署的复杂度。
 - Golang的并发模型非常适合处理高并发的日志采集任务,Beats能在多个数据流之间高效地并行处理,而不会因为大量日志数据的收集而导致性能瓶颈。
 
Beats的家族成员
Beats是轻量级的日志收集处理工具,Beats占用资源少。包含多款轻量级采集器:
Packetbeat: 网络数据(收集网络流量数据)- 用于 网络数据包 的捕获和分析,适合做 网络监控,可以帮助你分析各种应用层协议(如HTTP、MySQL、Redis、DNS等)的流量
 
Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)- 采集 系统指标(如CPU、内存、磁盘、网络等)和 应用程序指标(如MySQL、Redis等),并将这些数据发送到 Elasticsearch 进行存储和分析。
 
Filebeat: 文件(收集日志文件数据)- 主要用于 日志文件 的采集,常用于 Web 服务器、应用程序和系统日志的收集。它会实时读取指定的日志文件,并将日志内容发送给 Elasticsearch 或 Logstash。
 
Winlogbeat: windows事件日志(收集 Windows 事件日志数据)- 专为 Windows事件日志 设计,能帮助你采集 Windows 系统的事件日志(如应用程序日志、安全日志等),并发送给 Elasticsearch 或 Logstash。
 
Auditbeat:审计数据 (收集审计日志)- 主要用于 审计 和 系统安全监控,可以帮助收集有关操作系统文件、用户登录等的详细信息。
 
Heartbeat:运行时间监控 (收集系统运行时的数据)- 用于 服务监控,它定期发送HTTP、TCP或ICMP请求,监控服务的可用性和响应时间,帮助用户了解服务是否正常工作。
 
Beats的工作原理
它们类似数据搬运工,从各类系统、应用中采集数据后,送到 Logstash 或 Elasticsearch 进行处理。具体流程如下:
- 数据采集:Beat通过读取指定路径或接口,获取源数据(如日志文件、系统指标、网络流量等)。
 - 数据传输:Beat将采集到的数据经过一定的处理后,通过HTTP或其他协议发送到 Logstash 或 Elasticsearch。
 - 数据处理与分析:如果是通过 Logstash 发送,Logstash会进一步处理数据(如过滤、转换等),然后将数据发送到 Elasticsearch。
 - 可视化:数据被 Elasticsearch 存储后,借助 Kibana 进行可视化展示,帮助用户快速了解系统和应用的运行状况。
 
Beats的优势
- 轻量级:Beat具有较小的内存占用和CPU消耗,适合在大规模分布式系统中部署。
 - 高效:采集到的数据可以快速传输到Elasticsearch,几乎没有延迟。
 - 灵活性:支持多种数据源和输出目标,可以满足不同的数据采集需求。
 
关键特性
| 特性 | 详细说明 | 
|---|---|
| 专业化分工 | 不同 Beat 聚焦特定场景(如 Filebeat 日志、Metricbeat 监控指标) | 
| 低侵入性 | 无需改造应用代码,以代理形式部署在主机/容器内 | 
| 实时处理能力 | 毫秒级延迟传输数据,支持流式分析场景 | 
| 安全传输 | 原生支持 TLS 加密、身份认证(API Key/OAuth2) | 
| 自动负载均衡 | 多节点部署时自动分配采集任务,避免单点故障 | 
Beats的适用场景
- 日志收集:如Web服务器、应用程序、操作系统日志等。
 - 系统监控:如CPU、内存、磁盘等指标采集。
 - 网络监控:如分析网络流量、检测应用层协议等。
 - 安全审计:如收集操作系统和应用的安全事件。
 
filebeat安装
在需要收集日志的机器(node4,192.168.98.204)上部署filebeat。安装方式如下:
yum安装:安装ES的时候设置过yum源可以直接使用yum命令
1
[root@node4 ~]# yum -y install filebeat
rpm安装
1
2
3[root@node4 ~]# rpm -i filebeat-7.6.0-x86_64.rpm
警告:filebeat-7.6.0-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
-i install源码安装(参考官方文档)
安装目录:/usr/share/filebeat
配置文件目录: /etc/filebeat
配置文件:/etc/filebeat/filebeat.yml
服务启动管理:
1
2
3
4
5
6
7[root@node4 ~]# systemctl enable filebeat
Synchronizing state of filebeat.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable filebeat
Created symlink /etc/systemd/system/multi-user.target.wants/filebeat.service → /usr/lib/systemd/system/filebeat.service.
# 没有修改配置文件,起不来
[root@node4 ~]# systemctl start filebeat
filebeat配置文件
配置文件查看:
1  | [root@node4 ~]# cat /etc/filebeat/filebeat.yml |grep -v '#' |grep -v '^$'  | 
filebeat.yml 内容:( 收集本机messages日志到ElasticSearch)
1  | filebeat.inputs:  | 
修改filebeat配置文件之后需要重启filebeat服务,生效配置
1  | [root@node4 ~]# systemctl restart filebeat  | 
Filebeat收集数据上传
发送ElasticSearch并设置数据索引
1  | # 在output.*输出全局中插入下面三行  | 
发送Logstash
filebeat将采集日志发送给Logstash(node3,192.168.98.203)
1  | #定义输出到logstash  | 
logstash收到日志添加索引后发送ElasticSearch(node1:192.168.98.201,node2:192.168.98.202)。Logstash配置文件查看:
1  | [root@node3 conf.d]#cat filebeat_to_logstash_es.conf  | 
Logstash的配置文件 filebeat_to_logstash_es.conf
1  | input {  | 
重启filebeat、logstash服务生效配置
1  | [root@node4 ~]# systemctl restart filebeat  | 
基本部署
Filebeat 单机部署流程
安装依赖与下载
1  | sudo apt update # 更新软件源列表  | 
解压与权限配置
1  | tar -zxvf filebeat-8.13.4-linux-x86_64.tar.gz -C /opt/ # 解压至 /opt 目录  | 
配置文件修改
编辑 /opt/filebeat-8.13.4/filebeat.yml:
1  | filebeat.inputs:  | 
- 配置要点:
paths:支持通配符(如/var/log/nginx/*.log采集 Nginx 日志)。hosts:多节点集群可配置负载均衡(["http://node1:9200", "http://node2:9200"])。
 
启动
1  | cd /opt/filebeat-8.13.4 # 到安装目录下  | 
验证
1  | curl http://localhost:5066/stats | jq .filebeat.harvesting # 检查采集状态(需安装 jq)  | 
Filebeat 集群化部署关键步骤
统一配置管理
1  | scp filebeat.yml root@node4:/opt/filebeat-8.13.4/ # 分发配置文件到集群节点  | 
需同步项:配置文件 filebeat.yml、证书文件(若启用 TLS)
注册系统服务(所有节点)
1  | sudo ./filebeat setup --service # 生成 systemd 服务文件  | 
Kubernetes 部署DaemonSet 模式
部署 Filebeat DaemonSet
1  | apiVersion: apps/v1  | 
关键设计:
DaemonSet:确保每个 Node 运行一个 Pod,采集节点日志。hostPath:直接挂载宿主机日志目录,避免日志遗漏。
生成 ConfigMap
1  | kubectl create configmap filebeat-config --from-file=filebeat.yml # 从本地配置创建  | 
故障排查
| 问题现象 | 诊断命令 | 解释说明 | 
|---|---|---|
| 日志采集中断 | grep "ERR" /var/log/filebeat/filebeat | 
过滤错误日志 | 
| ES 连接失败 | telnet es-host 9200 | 
验证网络连通性 | 
| CPU 占用过高 | ./filebeat export config | 
检查冗余 input 配置 | 
生产环境调优参数
在 filebeat.yml 中增加:
1  | queue.mem.events: 4096 # 内存队列大小(防突发流量)  | 
- 调优效果:
- 提升吞吐量 30%+,降低 ES 索引压力。
 - 减少网络带宽消耗(尤其对云环境)。
 
 
操作原则:
- 单机测试使用 
-e前台启动快速验证; - 生产环境务必注册为 systemd 服务保障高可用;
 - Kubernetes 需配置资源限制(CPU/Memory)。
 
基本命令
基础命令结构
1  | ./filebeat [全局选项] <子命令> [子命令选项]  | 
核心子命令解析
1. 运行日志采集(run)
1  | ./filebeat run \  | 
2.配置测试(test)
1  | ./filebeat test config \ # 验证配置文件语法  | 
3.环境初始化(setup)
1  | ./filebeat setup \  | 
典型场景:
- 首次部署时预加载索引模板、仪表盘等资源。
 - 需提前配置 
output.elasticsearch连接信息。 
模块管理命令
1  | ./filebeat modules enable nginx \ # 启用Nginx日志模块  | 
- 模块配置:
- 模块路径:
/etc/filebeat/modules.d/*.yml。 - 支持动态覆盖:
-M "nginx.access.var.paths=[/var/log/nginx/*.log]"。 
 - 模块路径:
 
高级调试命令
1. 性能分析
1  | ./filebeat export config \ # 导出最终生效配置(含默认值)  | 
2. 密钥管理
1  | ./filebeat keystore create \ # 创建密钥库(存储敏感信息)  | 
安全建议:
- 用密钥库替代配置文件中的明文密码。
 - 密钥库文件默认位于 
$FILEBEAT_PATH/data/keystore 
生产环境常用组合
1. 安全启动
1  | ./filebeat run \  | 
2. 多配置文件加载
1  | ./filebeat -c config.yml -c inputs.d/*.yml # 主配置+分片配置  | 
命令输出解析示例
执行 ./filebeat test output 后:
1  | Elasticsearch: http://es-node:9200...  | 
关键参数速查表
| 参数 | 作用 | 示例 | 
|---|---|---|
-E | 
动态覆盖配置 | -E "queue.mem.events=2048" | 
-M | 
覆盖模块配置 | -M "system.syslog.enabled=false" | 
--path.* | 
自定义路径(配置、数据、日志) | --path.logs=/var/log/filebeat | 
--once | 
采集一次后退出(测试用) | ./filebeat --once | 




