filebeat系列-入门整理
读者要求:对filebeat的使用有一定了解
目录:
原理了解
- 定位:Filebeat是一个采集工具
- 支持的input范围
- 运行原理图
- 整体过程
- at least once
- 异常情况
- reload
安装和结构
一、原理了解
-
定位:FileBeat是一个采集工具
- Filebeat源码归属于beats项目,beats抽象出了一个libbeat库
- libbeat已经实现了内存缓存队列memqueue,数据过滤处理processor等通用功能,以及output日志发送客户端
- filebeat是基于libbeat实现的其中一个采集工具,还有很多其他的"beat"
-
支持的input范围
-
运行原理图
-
整体过程
- 寻找Input配置的日志文件,注意这里用的是shell正则与普通的正则符稍有不同。针对每个日志文件,filebeat都会启动一个harvester协程,即一个goroutine,在该goroutine中不停的读取日志文件,直到文件的EOF末尾
- 不同的harvester采集到的日志数据都会发送至一个全局的队列queue中(默认启动基于内存的,基于磁盘的处于alpha阶段),这里称之为spooler缓存
- 每当queue中的数据缓存到一定的大小或者超过了定时的时间(默认1s),会被注册的client从队列中消费,发送至配置的后端(kafka,es,redis等)
- ClientWorker不断publish消费下来的数据,每次发送成功返回ack事件
- Registrar接收到ack,登记状态到registry文件
-
at least once
- filebeat维护了一个registry文件在本地的磁盘,该registry文件维护了所有已经采集的logfile的状态。
- 每当日志数据publish至后端成功后,返回ack事件,filebeat启动了一个独立的registry协程负责监听该事件,接收到ack事件后将logfile的State状态更新至registry文件中
- State中的Offset表示读取到的文件偏移量,filebeat保证Offset记录之前的日志数据肯定被后端的日志存储接收到
Registry文件内容示例:
[{"source":"/tmp/aa.log","offset":48,"timestamp":"2019-07-03T13:54:01.298995+08:00","ttl":-1,"type":"log","meta":null,"FileStateOS":{"inode":7048952,"device":16777220}}]
-
异常情况
1、filebeat根据inode和设备号来标志每个日志文件。比较特殊的情况,linux下如果老文件被移除,新文件马上创建,两者可能有相同的inode,由于filebeat根据inode来标志文件记录采集的偏移,
会导致registry里记录的是被移除的文件State状态,相当于新的文件采集用的老文件的offset,造成日志数据遗漏。要尽量避免inode被复用的情况,同时防止registry文件随着时间增长越来越大,建议
使用clean_inactive和clean_remove配置,将长时间未更新或者被删除的文件State从registry中移除
2、filebeat异常重启后,当harvester启动的时候会读取registry文件,从上次记录的状态继续采集,确保不会从头开始重复发送所有的日志文件,如果日志发送过程中,还没来得及返回ack,filebeat就
挂掉,registry文件不会更新至最新的状态,下次采集的时候,这部分的日志会重复发送,所以这意味着filebeat只能保证at least once,无法保证不重复发送。
3、harvester读取日志时会根据一些异常场景更新registry。例如,如果一个日志文件被清空,filebeat会在下一次Reader.Next方法中返回ErrFileTruncate异常,将inode标志文件的Offset置为0,结束
这次harvester,重新启动新的harvester,虽然文件不变,但是registry中的Offset为0,采集会从头开始。
-
reload
仅支持定时reload input和module配置,使用reload.enable+reload.period来配置自动reload的时间间隔。filebeat在启动时,会创建一个专门用于reload的协程。对于每个正在运行的harvester,filebeat
会将其加入一个全局的Runner列表,每次到了定时的间隔后,会触发一次配置文件的diff判断,如果是需要停止的加入stopRunner列表,然后逐个关闭,新的则加入startRunner列表,启动新的Runner
二、 安装和结构
下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
包名:filebeat-7.6.2-linux-x86_64.tar
大小:23.7M
安装方式:tar解压
文件夹布局说明:如果是用如上解压tar.gz,查看Location. Config Option是命令行指定时,对应的参数项
Type | Description |
Default Location (默认位置) |
Location (tar包解压情形) |
Config Option (命令行参数) |
---|---|---|---|---|
home |
Home of the Filebeat installation.(安装的路径) default base path for all other path settings |
|
|
|
bin |
The location for the binary files. |
{path.home}/bin |
|
|
config |
The location for configuration files. default base path for configuration files 如main yml,es template |
{path.home} |
|
|
data |
The location for persistent data files.default base path for all the files in which Filebeat needs to store its data. Tip:When running multiple Filebeat instances on the same host, make sure they each have a distinct |
{path.home}/data |
|
|
logs |
The location for the logs created by Filebeat. |
{path.home}/logs |
|
|
drwxr-x--- 7 root root 146 May 29 16:57 data ---------------------数据文件 -rw-r--r-- 1 root root 500235 Mar 26 13:23 fields.yml -rwxr-xr-x 1 root root 77562560 Mar 26 13:25 filebeat -----------------filebeat命令文件 -rw-r--r-- 1 root root 89359 Mar 26 13:23 filebeat.reference.yml----参考文件
-rw------- 1 root root 8333 Mar 26 13:23 filebeat.yml--------------默认配置文件 drwxr-xr-x 3 root root 15 Mar 26 13:23 kibana -rw-r--r-- 1 root root 13675 Mar 26 12:44 LICENSE.txt drwx------ 7 root root 177 May 29 16:57 logs----------------------运行中日志文件 drwxr-xr-x 39 root root 4096 Mar 26 13:23 module drwxr-xr-x 2 root root 4096 Mar 26 13:23 modules.d -rw-r--r-- 1 root root 328580 Mar 26 12:44 NOTICE.txt -rw-r--r-- 1 root root 802 Mar 26 13:26 README.md