Logstash太费内存,如果在要采集的服务上都安装,这样资源消耗非常高,所以我们要用轻量级的采集工具如(Beats)才更高效,更省资源。

参考文章:

ELK-beats数据采集

ELK系列-(四)轻量级的日志收集助手-Beat家族

ELK日志文件分析系统——补充(B——Beats)

Beats

简介

Beats 是 Elastic Stack 提供的一组轻量级数据采集器,负责从各种来源采集数据,然后将数据发送到 ElasticsearchLogstash。这些小工具非常轻巧,占用系统资源少,适用于海量的分布式环境。Beats官方文档地址

Beats在实现时选择了Golang,Golang的高效内存管理、简洁语法和并发处理能力,使 Beats 在保证低资源消耗的前提下,提供强大的数据采集和传输能力。

  1. Golang是编译型语言,它编译后的二进制文件无需依赖虚拟机,因此在资源消耗和启动速度上都比Java更有优势。
  2. Golang的跨平台特性使得Beats能够原生支持Linux、Windows和macOS等多个操作系统,减少了开发和部署的复杂度。
  3. Golang的并发模型非常适合处理高并发的日志采集任务,Beats能在多个数据流之间高效地并行处理,而不会因为大量日志数据的收集而导致性能瓶颈。

Beats的家族成员

Beats是轻量级的日志收集处理工具,Beats占用资源少。包含多款轻量级采集器

  • Packetbeat: 网络数据(收集网络流量数据)

    • 用于 网络数据包 的捕获和分析,适合做 网络监控,可以帮助你分析各种应用层协议(如HTTP、MySQL、Redis、DNS等)的流量
  • Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)

    • 采集 系统指标(如CPU、内存、磁盘、网络等)和 应用程序指标(如MySQL、Redis等),并将这些数据发送到 Elasticsearch 进行存储和分析。
  • Filebeat: 文件(收集日志文件数据)

    • 主要用于 日志文件 的采集,常用于 Web 服务器、应用程序和系统日志的收集。它会实时读取指定的日志文件,并将日志内容发送给 ElasticsearchLogstash
  • Winlogbeat: windows事件日志(收集 Windows 事件日志数据

    • 专为 Windows事件日志 设计,能帮助你采集 Windows 系统的事件日志(如应用程序日志、安全日志等),并发送给 ElasticsearchLogstash
  • Auditbeat:审计数据 (收集审计日志)

    • 主要用于 审计系统安全监控,可以帮助收集有关操作系统文件、用户登录等的详细信息。
  • Heartbeat:运行时间监控 (收集系统运行时的数据)

    • 用于 服务监控,它定期发送HTTP、TCP或ICMP请求,监控服务的可用性和响应时间,帮助用户了解服务是否正常工作。

Beats的工作原理

它们类似数据搬运工,从各类系统、应用中采集数据后,送到 Logstash 或 Elasticsearch 进行处理。具体流程如下:

  1. 数据采集:Beat通过读取指定路径或接口,获取源数据(如日志文件、系统指标、网络流量等)。
  2. 数据传输:Beat将采集到的数据经过一定的处理后,通过HTTP或其他协议发送到 Logstash 或 Elasticsearch。
  3. 数据处理与分析:如果是通过 Logstash 发送,Logstash会进一步处理数据(如过滤、转换等),然后将数据发送到 Elasticsearch。
  4. 可视化:数据被 Elasticsearch 存储后,借助 Kibana 进行可视化展示,帮助用户快速了解系统和应用的运行状况。

Beats的优势

  • 轻量级:Beat具有较小的内存占用和CPU消耗,适合在大规模分布式系统中部署。
  • 高效:采集到的数据可以快速传输到Elasticsearch,几乎没有延迟。
  • 灵活性:支持多种数据源和输出目标,可以满足不同的数据采集需求。

关键特性

特性 详细说明
专业化分工 不同 Beat 聚焦特定场景(如 Filebeat 日志、Metricbeat 监控指标)
低侵入性 无需改造应用代码,以代理形式部署在主机/容器内
实时处理能力 毫秒级延迟传输数据,支持流式分析场景
安全传输 原生支持 TLS 加密、身份认证(API Key/OAuth2)
自动负载均衡 多节点部署时自动分配采集任务,避免单点故障

Beats的适用场景

  • 日志收集:如Web服务器、应用程序、操作系统日志等。
  • 系统监控:如CPU、内存、磁盘等指标采集。
  • 网络监控:如分析网络流量、检测应用层协议等。
  • 安全审计:如收集操作系统和应用的安全事件。

filebeat安装

在需要收集日志的机器(node4,192.168.98.204)上部署filebeat。安装方式如下:

  1. yum安装:安装ES的时候设置过yum源可以直接使用yum命令

    1
    [root@node4 ~]# yum -y install filebeat
  2. 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
  3. 源码安装(参考官方文档)

    安装目录:/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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
filebeat.inputs:
- type: log
enabled: false # 默认false,修改为true
paths:
# - /var/log/*.log # 收集日志的路径
- /var/log/messages # 收集日志的路径 filebeat收集本机messages日志到ES
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
# 定义kibana地址
setup.kibana:
# 定义ES地址接收数据
output.elasticsearch:
hosts: ["192.168.98.201:9200"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~

修改filebeat配置文件之后需要重启filebeat服务,生效配置

1
[root@node4 ~]# systemctl restart filebeat

Filebeat收集数据上传

发送ElasticSearch并设置数据索引

1
2
3
4
5
6
7
8
# 在output.*输出全局中插入下面三行
setup.ilm.enabled: false # 禁用ilm
setup.template.name: "node4_messages" # 设置索引模板名
setup.template.pattern: "node4_messages-*" # 索引前缀
# 定义ES地址接收数据
output.elasticsearch:
hosts: ["192.168.98.201:9200"] # ElasticSearch 服务器地址和端口
index: "node4_messages-%{+yyyy.MM.dd}" #定义索引

发送Logstash

filebeat将采集日志发送给Logstash(node3,192.168.98.203)

1
2
3
#定义输出到logstash
output.logstash:
hosts: ["192.168.98.203:5044"] # 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
2
3
4
5
6
7
8
9
10
11
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["192.168.98.201:9200"] # ElasticSearch 服务器地址和端口
index => "server_node4-%{+YYYY.MM.dd}" # 定义索引
}
}

重启filebeat、logstash服务生效配置

1
2
[root@node4 ~]# systemctl restart filebeat
[root@node3 ~]# systemctl restart logstash

基本部署

Filebeat 单机部署流程

安装依赖与下载

1
2
3
4
5
6
7
8
9
sudo apt update             # 更新软件源列表
sudo apt install wget -y # 安装下载工具

# 下载二进制包
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.13.4-linux-x86_64.tar.gz

# 命令解析
apt update # 获取最新软件包信息,避免版本冲突
wget # 从 Elastic 官网下载指定版本 Filebeat(替换版本号适配环境)

解压与权限配置

1
2
3
4
5
6
tar -zxvf filebeat-8.13.4-linux-x86_64.tar.gz -C /opt/        # 解压至 /opt 目录
sudo chown -R root:root /opt/filebeat-8.13.4 # 所有权归属 root(安全合规)

# 关键参数:
-zxvf # -z 解压 gzip,-x 解包,-v 显示过程,-f 指定文件
chown -R # 递归修改目录所有权,避免权限不足导致采集失败

配置文件修改

编辑 /opt/filebeat-8.13.4/filebeat.yml

1
2
3
4
5
6
filebeat.inputs:
- type: filestream
paths: - /var/log/*.log # 监控所有 .log 文件
output.elasticsearch:
hosts: ["192.168.98.202:9200"] # ES 集群地址
logging.level: warning # 减少日志量(生产环境推荐
  • ‌配置要点:
    • paths:支持通配符(如 /var/log/nginx/*.log 采集 Nginx 日志)。
    • hosts:多节点集群可配置负载均衡(["http://node1:9200", "http://node2:9200"])。

启动

1
2
cd /opt/filebeat-8.13.4         # 到安装目录下
./filebeat -e -c filebeat.yml # 前台启动(-e 输出日志到控制台)

‌验证‌

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
2
3
4
5
6
sudo ./filebeat setup --service                            # 生成 systemd 服务文件
sudo systemctl enable --now filebeat # 启动并设置开机自启动

# 服务管理命令:
systemctl status filebeat # 检查运行状态
journalctl -u filebeat -f # 实时追踪日志

Kubernetes 部署DaemonSet 模式

部署 Filebeat DaemonSet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: apps/v1 
kind: DaemonSet
metadata:
name: filebeat
spec:
template:
spec:
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:8.13.4
volumeMounts:
- name: varlog
mountPath: /var/log # 挂载宿主机日志目录
- name:config
mountPath: /usr/share/filebeat/filebeat.yml
volumes:
- name: varlog
hostPath: path: /var/log
- name: config
configMap: name: filebeat-config # 通过 ConfigMap 管理配置

关键设计‌:

  • 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
2
3
4
queue.mem.events: 4096                         # 内存队列大小(防突发流量)
processors:
- drop_fields: # 删除无用字段减负
fields: ["agent.ephemeral_id"]
  • ‌调优效果:
    • 提升吞吐量 30%+,降低 ES 索引压力。
    • 减少网络带宽消耗(尤其对云环境)。

操作原则‌:

  1. 单机测试使用 -e 前台启动快速验证;
  2. 生产环境务必注册为 systemd 服务保障高可用;
  3. Kubernetes 需配置资源限制(CPU/Memory)。

基本命令

基础命令结构

1
2
3
4
5
6
./filebeat [全局选项] <子命令> [子命令选项]

# 命令层级:
# 全局选项:影响所有子命令行为(如 `-c` 指定配置文件)
# 子命令:执行特定功能(如 `run` 启动采集)
# 子命令选项:针对子命令的细化配置。

核心子命令解析

1. 运行日志采集(run

1
2
3
4
5
6
7
8
9
./filebeat run \
-e \ # 日志输出到标准错误(调试用)
-c /etc/filebeat.yml \ # 指定配置文件路径
-E "output.elasticsearch.hosts=['http://es-node:9200']" # 动态覆盖配置

# 参数意义:
-e # 禁用系统日志,直接输出到终端,便于实时调试。
-c # 显式指定配置文件,避免默认路径冲突。
-E # 运行时动态修改配置项(优先级高于配置文件)。

2.配置测试(test

1
2
3
4
5
6
7
./filebeat test config \         # 验证配置文件语法
-c ./filebeat-prod.yml \ # 测试非默认配置文件
-d "publish" # 仅调试"publish"相关组件

# 调试选择器
-d "*" # 启用全部组件调试日志。
-d "input" # 聚焦输入模块问题排查。

3.环境初始化(setup

1
2
3
4
./filebeat setup \
--dashboards \ # 自动创建Kibana仪表盘
--pipelines \ # 部署Elasticsearch Ingest管道
-E "setup.kibana.host=kibana:5601" # 指定Kibana地址

典型场景‌:

  • 首次部署时预加载索引模板、仪表盘等资源。
  • 需提前配置 output.elasticsearch 连接信息。

模块管理命令

1
2
3
./filebeat modules enable nginx \             # 启用Nginx日志模块
./filebeat modules list \ # 查看已启用模块
./filebeat modules disable system # 停用系统监控模块
  • ‌模块配置:
    • 模块路径:/etc/filebeat/modules.d/*.yml
    • 支持动态覆盖:-M "nginx.access.var.paths=[/var/log/nginx/*.log]"

高级调试命令

1. 性能分析

1
2
./filebeat export config \                     # 导出最终生效配置(含默认值)
./filebeat -v \ # 显示详细版本信息(含依赖库)

2. 密钥管理

1
2
./filebeat keystore create \                 # 创建密钥库(存储敏感信息)
./filebeat keystore add ES_PWD # 交互式添加Elasticsearch密码

安全建议‌:

  • 用密钥库替代配置文件中的明文密码。
  • 密钥库文件默认位于 $FILEBEAT_PATH/data/keystore

生产环境常用组合

1. 安全启动

1
2
3
./filebeat run \
--strict.perms=false \ # 放宽文件权限检查
--path.data=/mnt/filebeat_data # 自定义数据存储路径

2. 多配置文件加载

1
./filebeat -c config.yml -c inputs.d/*.yml     # 主配置+分片配置

命令输出解析示例

执行 ./filebeat test output 后:

1
2
3
4
Elasticsearch: http://es-node:9200...
Connection OK. Cluster UUID: xyz123 # ES连接正常
Logstash: tcp://logstash:5044...
Connection failed: dial timeout # Logstash连接失败

关键参数速查表

参数 作用 示例
-E 动态覆盖配置 -E "queue.mem.events=2048"
-M 覆盖模块配置 -M "system.syslog.enabled=false"
--path.* 自定义路径(配置、数据、日志) --path.logs=/var/log/filebeat
--once 采集一次后退出(测试用) ./filebeat --once