Filebeat工作原理
Filebeat由两个主要组件组成:inputsharvesters。 这些组件协同工作来查看最新文件内容并将事件数据发送到指定的输出。(注意与之前版本的不同,之前版本是prospectors和havesters)
harvester
Harvester(收割机)负责读取单个文件内容。每个文件会启动一个Harvester,每个Harvester会逐行读取各个文件,并将文件内容发送到指定输出。Harvester负责打开和关闭文件,这意味在Harvester运行的时候,文件描述符处于打开状态,如果文件在被harvested(收集)中被删除或者被重命名,Harvester会继续读取此文件。所以在Harvester关闭之前,磁盘不会被释放。默认情况filebeat会保持文件打开的状态,直到达到close_inactive(如果此选项开启,filebeat会在指定时间内将不再更新的文件句柄关闭,时间从harvester读取最后一行的时间开始计时。若文件句柄被关闭后,文件发生变化,则会启动一个新的harvester。若此参数配置不当,则可能发生日志不实时的情况。Harvester使用内部时间戳来记录文件最后被收集的时间。例如:设置5m,则在Harvester读取文件的最后一行之后,开始倒计时5分钟,若5分钟内文件无变化,则关闭文件句柄。默认5m)。
关闭Harvester会产生以下后果:
  • 文件处理已关闭,在harvester仍在读取文件时如果文件被删除,则释放底层资源。
  • 文件的采集只会在 scan_frequency 过后重新开始。
  • 如果在harvester关闭的情况下移动或移除文件,则不会继续采集文件数据。
要控制harvester何时关闭,请使用close_* 配置选项。
Inputs
input负责管理harvesters找到所有要读取的资源。
如果input类型为log,则input将查磁盘上与定义的全局路径匹配的所有文件,并为每个文件启动一个harvester。 每个input都在自己的Go程序中运行。
以下Filebeat配置示例从与指定的全局模式匹配的所有日志文件中收集日志数据行:
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log
Filebeat目前支持 several input types.。 每种输入类型都可以定义多次。 log input检查每个文件以查看是否需要启动harvester,是否已经运行harvester,或者是否可以忽略该文件(see ignore_older)。 只有在harvester被关闭后文件的大小发生变化,才会继续采集新增行。
Filebeat如何记录文件状态:
将文件状态记录在文件中(默认在/var/lib/filebeat/registry)。此文件可以记住Harvester收集文件的偏移量。若连接不上输出设备,如ES等,filebeat会记录发送前的最后一行,并再可以连接的时候继续发送。在Filebeat运行时,状态信息也会保存在内存中以用于每个输入。重新启动Filebeat时,使用registry文件的数据用于重建状态,Filebeat会在最后一个已知位置继续运行每个havester。对于每个输入,filebeat会为每个找到的文件记录一个状态,对于每个文件,Filebeat存储唯一标识符以检测文件是否先前被收集。
如果使用配置涉及每天创建大量新文件,会发现注册表文件增长过大。请参阅Registry file is too large?有关可以设置以解决此问题的配置选项的详细信息。

registry文件内容示例:

[root@localhost ~]# cat /var/lib/filebeat/registry 

[{"source":"/var/log/secure","offset":2201,"timestamp":"2018-09-04T10:35:03.281727468+08:00","ttl":-1,"type":"log","FileStateOS":{"inode":2099070,"device":64515}}, {"source":"/var/log/messages","offset":527,"timestamp":"2018-09-04T01:05:19.015351312+08:00","ttl":-1,"type":"log","FileStateOS":{"inode":2099069,"device":64515}}]

Filebeat如何保证事件至少被输出一次:
Filebeat之所以能保证事件至少被传递到配置的输出一次,没有数据丢失,是因为filebeat将每个事件的传递状态保存在注册文件中。在未得到输出方确认时,filebeat会尝试一直发送,直到得到回应。若filebeat在传输过程中被关闭,则不会关闭之前确认所有发送事件(此时registry文件未记录该文件发送的偏移量)。任何在filebeat关闭之前未确认的事件,都会在filebeat重启之后重新发送。这可确保至少发送一次,但有可能会重复。可通过设置shutdown_timeout 参数来设置关闭之前的等待事件回应的时间(默认禁用)。
注意:Filebeat的至少一次输出受到日志轮换和删除旧文件的限制。 如果将日志文件写入磁盘并且日志轮换的速度超过Filebeat处理的速度,或者如果文件在输出不可用时被删除,数据可能会丢失。 在Linux上,Filebeat也可能因inode重用而跳过行。 有关inode重用问题的更多详细信息,请参阅Frequently asked questions 
参考链接:

搜索

复制

5、Filebeat工作原理的更多相关文章

  1. Filebeat工作原理

    在这篇文章中,您可以了解Filebeat的关键构建模块以及它们如何一起工作.了解这些概念将有助于您针对特定用例对Filebeat进行配置做出明智的决定.Filebeat由两个主要组件组成: prosp ...

  2. 04 . Filebeat简介原理及配置文件和一些案例

    简介 Beats轻量型数据采集器 Beats 平台集合了多种单一用途数据采集器.它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据. Beats系列 全 ...

  3. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  4. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  5. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  6. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  7. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  8. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  9. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

随机推荐

  1. 软工+C(7): 野生程序员

    // 上一篇:最近发展区/脚手架 // 下一篇:提问和回复 怎样做足够好的软件?我们就差一个程序员! 没有什么软件工程的理论的时候,程序员们凭借自己对编程的热爱,凭借着:"这是一个可以自动化 ...

  2. 磁盘IO的性能指标 阻塞与非阻塞、同步与异步 I/O模型

    磁盘IO的性能指标 - 蝈蝈俊 - 博客园https://www.cnblogs.com/ghj1976/p/5611648.html 阻塞与非阻塞.同步与异步 I/O模型 - 蝈蝈俊.net - C ...

  3. 使用FaceNet 图像相识度对比

    1. 模型结构:

  4. [SimplePlayer] 1. 从视频文件中提取图像

    在开始之前,我们需要了解视频文件的格式.视频文件的格式众多,无法三言两语就能详细分析其结构,尽管如此,ffmpeg却很好地提取了各类视频文件的共同特性,并对其进行了抽象描述. 视频文件格式,统称为co ...

  5. ListView与RecyclerView对比浅析——缓存机制

    https://www.jianshu.com/p/193fb966e954 一,背景 RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大 ...

  6. 题解:[APIO/CTSC 2007]数据备份

    你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已 ...

  7. Springboot 1.简介 及第一个demo

    按照官网上的新建一个maven项目,然后将类引入pom.xml文件中 <?xml version="1.0" encoding="UTF-8"?> ...

  8. js的7种类型

    众所周知,js有7种数据类型 1.  null 2. undefined 3. boolean 4. number 5. string 6. 引用类型(object.array.function) 7 ...

  9. Self-organizing Maps及其改进算法Neural gas聚类在异常进程事件识别可行性初探

    catalogue . SOM简介 . SOM模型在应用中的设计细节 . SOM功能分析 . Self-Organizing Maps with TensorFlow . SOM在异常进程事件中自动分 ...

  10. 金融量化分析【day112】:初识量化交易

    一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...