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 |




