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
  • 相关阅读:
    JQuery操作元素的属性与样式及位置 复制代码
    【转】从零开始编写自己的C#框架
    一步一步Asp.Net MVC系列_权限管理设计
    ASP.NET MVC5 网站开发实践
    MVC5+EF6 入门
    ASP.NET中使用JqGrid完整实现
    技术是容易学会的(Copy)
    Oracle 创建用户并且授权
    python安装zlib一直无效
    linux ln 命令(转载)
  • 原文地址:https://www.cnblogs.com/yb38156/p/13045782.html
Copyright © 2011-2022 走看看