zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/yb38156/p/13045782.html
Copyright © 2011-2022 走看看