filebeat系列-入门整理

读者要求:对filebeat的使用有一定了解

目录:

原理了解

  • 定位:Filebeat是一个采集工具
  • 支持的input范围
  • 运行原理图
  • 整体过程
  • at least once
  • 异常情况
  • reload

安装和结构


 

一、原理了解

  • 定位:FileBeat是一个采集工具

  1. Filebeat源码归属于beats项目,beats抽象出了一个libbeat库
  2. libbeat已经实现了内存缓存队列memqueue,数据过滤处理processor等通用功能,以及output日志发送客户端
  3. filebeat是基于libbeat实现的其中一个采集工具,还有很多其他的"beat"
  • 支持的input范围

 

  • 运行原理图

 

  • 整体过程

  1. 寻找Input配置的日志文件,注意这里用的是shell正则与普通的正则符稍有不同。针对每个日志文件,filebeat都会启动一个harvester协程,即一个goroutine,在该goroutine中不停的读取日志文件,直到文件的EOF末尾
  2. 不同的harvester采集到的日志数据都会发送至一个全局的队列queue中(默认启动基于内存的,基于磁盘的处于alpha阶段),这里称之为spooler缓存
  3. 每当queue中的数据缓存到一定的大小或者超过了定时的时间(默认1s),会被注册的client从队列中消费,发送至配置的后端(kafka,es,redis等)
  4. ClientWorker不断publish消费下来的数据,每次发送成功返回ack事件
  5. Registrar接收到ack,登记状态到registry文件
  • at least once

  1. filebeat维护了一个registry文件在本地的磁盘,该registry文件维护了所有已经采集的logfile的状态。
  2. 每当日志数据publish至后端成功后,返回ack事件,filebeat启动了一个独立的registry协程负责监听该事件,接收到ack事件后将logfile的State状态更新至registry文件中
  3. 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是命令行指定时,对应的参数项

TypeDescription

Default Location

(默认位置)

Location

(tar包解压情形)

Config Option

(命令行参数)

home

Home of the Filebeat installation.(安装的路径)

default base path for all other path settings

 

{extract.path}

path.home

bin

The location for the binary files.

{path.home}/bin

{extract.path}

 

config

The location for configuration files.

default base path for configuration files

如main yml,es template

{path.home}

{extract.path}

path.config

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.data value.

{path.home}/data

{extract.path}/data

path.data

logs

The location for the logs created by Filebeat.

{path.home}/logs

{extract.path}/logs

path.logs(注意有s)

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

 

posted @ 2020-06-04 20:08  鼠标的博客  阅读(1746)  评论(0编辑  收藏  举报