Lazy loaded image
日志
Lazy loaded imageFilebeat
字数 3867阅读时长 10 分钟
2025-3-29
2025-6-19
type
status
date
slug
summary
tags
category
icon
password

Beats

Beats 是一个用于数据采集的轻量级代理工具,专注于单一用途的数据传输。它们可以安装在成百上千台机器上,负责收集数据并发送到 Logstash 或 Elasticsearch。通俗来说,Beats 就是数据采集工具,能够直接或通过 Logstash 传输数据到 Elasticsearch,最终在 Kibana 中进行可视化展示。
Logstash 是一个基于 Java 开发的日志处理工具,需要 Java 运行环境。运行时至少占用 500MB 以上的内存,同时会消耗较多的磁盘空间。由于资源占用较高,在某些场景下,可以使用 Beats(基于 Go 开发)代替 Logstash 进行日志采集。相比之下,Beats 部署更轻量,仅占用约 10MB 内存,并且磁盘占用也更小。
notion image
Beats 是一些工具集,包括以下,其中 filebeat 应用最为广泛 filebeat:收集日志文件数据,最常用的工具 packetbeat:用于收集网络数据,一般用zabbix实现此功能 metricbeat:从OS和服务收集指标数据,比如系统运行状态、CPU 内存利用率等 winlogbeat:从Windows平台日志收集工具。 heartbeat:定时探测服务是否可用。支持ICMP、TCP 和 HTTP,也支持TLS、身份验证和代理 auditbeat:收集审计日志 Functionbeat:使用无服务器基础架构提供云数据。面向云端数据的无服务器采集器,处理云数据
下载地址:https://www.elastic.co/cn/downloads/beats,注意,Beats 版本要和 Elasticsearch 相同的版本,否则可能会出错
notion image

Filebeat

Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。
Filebeat是Beat成员之一,基于Go语言,无任何依赖,并且比Logstash更加轻量,非常适合安装在生产机器上,是只需要10M多内存,不会带来过高的资源占用,轻量意味着简单,所以 Filebeat 并没有集成和 logstash 一样的正则处理功能,而是将收集的日志原样上报。filebeat 支持从日志文件syslog、redis、docker、TCP、UDP、标准输入等读取数据,对数据做简单处理,再输出至Elasticsearch/Logstash/Redis/Kafka等。
Filebeat的工作方式如下: 启动Filebeat时,它将启动一个或多个输入源,这些输入将在为日志数据指定的位置中查找。 对于Filebeat所找到的每个日志,Filebeat都会启动收集器harvester进程。 每个收集器harvester都读取一个日志以获取新内容,并将新日志数据发送到libbeat libbeat会汇总事件并将汇总的数据发送到为Filebeat配置的输出。
notion image

部署Filebeat

安装Filebeat,官网下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
解压并修改目录名
将filebeat命令拷贝到/usr/local/bin目录

Filebeat 配置参数

Filebeat的配置文件通常是YAML格式,包含各种配置参数,用于定义数据源、输出目标、数据处理和其他选项。输入和输入官方说明,注意,Filebeat 支持多个输入,但不支持同时有多个输出
https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html https://www.elastic.co/guide/en/beats/filebeat/current/configuring-output.html
示例:

从标准输入读取再输出至标准输出

创建配置文件,从标准输入获取输入的数据,然后输出到标准输出
语法检查
从指定文件中读取配置,启动filebeat
notion image
如果输入的是json数据,则默认会将json数据存储至message,比如我们这里输入{"name" : "zhangsan", "age" : "18"}
notion image
那么如果我们想要输出的结果是json格式,则需要修改json.keys_under_root字段为true,该字段默认为false。false会将json数据存储至message,true则会将数据以独立字段存储,并且删除message字段,如果是文本还是放在message字段中。修改配置文件
然后启动filebeat
输入Json格式信息{"name" : "zhangsan", "age" : "18"},再回车后输出如下
notion image

从文件读取再输出至文件

创建配置文件,从文件读取数据,然后输出到文件
启动filebeat
然后我们打开一个新的终端,执行生成文件内容
然后可以看到下面的输出信息
notion image
Filebeat 会记录日志文件的读取位置,以防止重复采集相同的日志数据。它会将每个已读取文件的相关元数据存储在 data.json 文件中。这样,即使 Filebeat 发生重启或故障,也能确保日志采集的连续性,避免重复读取已处理的日志内容。

收集系统日志到 ES

Filebeat收集的日志在Elasticsearch中默认生成的索引名称为filebeat-<版本>-<时间>-<ID>,8.X版本为.ds-filebeat-<版本>-<时间>-<ID> 方法1,修改filebeat配置文件
方法2:或者修改syslog.conf
启动filebeat
执行curl命令可以看到新创建的索引,我们这里使用的是ES 7.X版本,默认生成的索引名称为filebeat-<版本>-<时间>-<ID>
下面我们通过 Kibana 查看收集的日志信息。首先我们先来创建索引模式,点击索引模式 → 创建索引模式,索引模式这里输入filebeat-7.3.1*,然后点击下一步
notion image
notion image
notion image

自定义索引名称收集指定日志到 ES

经过刚才的方式,数据是发送成功了,默认情况下 Filebeat 写入到 ES 的索引分片为1,副本数为1。修改配置文件,自定义索引名称收集所有系统日志到 ELasticsearch,并修改分片数
启动filebeat
执行curl命令可以看到新创建的索引,我们这里使用的索引名称为test-%{[agent.version]}-%{+yyyy.MM.dd},三个分区一个副本
下面我们通过 Kibana 查看收集的日志信息。首先我们先来创建索引模式,点击索引模式 → 创建索引模式,索引模式这里输入test*,然后点击下一步。索引模式创建完后我们可以自己写一条日志测试,只过滤了关键字的日志发送
然后查看kibana多了一条日志输出
notion image

收集Nginx日志到 ELasticsearch

生产环境中经常需要获取Web访问用户的信息,比如:网站的PV、UV、状态码、用户来自哪个地区,访问时间等。可以通过收集的Nginx的访问日志实现,默认Nginx的每一次访问生成的访问日志是一行文本,ES没办法直接提取有效信息,不利于后续针对特定信息的分析。可以将Nginx访问日志转换为JSON格式解决这一问题,收集 Nginx的 Json 格式访问日志和错误日志到 Elasticsearch 不同的索引
首先我们来修改nginx访问日志格式为Json
检查语法是否正常,然后启动。执行curl 127.0.0.1进行访问测试,然后查看日志是否输出正常
notion image
然后修改 Filebeat 配置文件
启动filebeat
执行curl命令可以看到新创建的索引,我们这里使用的索引名称为nginx-access-%{[agent.version]}-%{+yyy.MM.dd}nginx-error-%{[agent.version]}-%{+yyy.MM.dd},三个分区一个副本
下面我们通过 Kibana 查看收集的日志信息。首先我们先来创建索引模式,点击索引模式 → 创建索引模式,索引模式这里输入nginx*,然后点击下一步。通过kibana查看收集的日志信息
notion image

收集Nginx日志到 Redis

Filebeat 收集 Nginx 日志,然后缓存到 Redis,然后通过另外的logstash将redis服务器的数据取出,在写入到elasticsearch服务器。也可以是其它日志,我们这里以 Nginx 为例演示
然后重启filebeat服务
在 Redis 验证日志数据
访问nginx服务,可以看到reids就会有数据

收集Nginx日志输出至 Kafka

Filebeat 收集 Nginx 日志,然后缓存到 Kafka,然后通过另外的logstash将Kafka服务器的数据取出,在写入到elasticsearch服务器。也可以是其它日志,我们这里以 Nginx 为例演示
notion image
配置filebeat采集nginx日志
然后我们这里连接kafka,创建一个topic,三分区两副本
查看创建好的topic
然后重启filebeat服务
查看kafka数据
下面我们这里来模拟一个错误日志输出
此时消费者消费到数据
notion image
如果有时间戳的问题,有一个文件拍时间戳处理器,可以用来更好地格式化或覆盖@时间戳字段https://www.elastic.co/guide/en/beats/filebeat/current/processor-timestamp.html
 
上一篇
Elastic Stack
下一篇
EFK