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. 【学习总结】GirlsInAI ML-diary day-11-while循环

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day11 认识while循环执行 对于while/break/continue的认识 新值替换变量 一般while语句 无 ...

  2. Python正则表达式里的单行re.S和多行re.M模式

    Python正则表达式里的单行re.S和多行re.M模式 Python 的re模块内置函数几乎都有一个flags参数,以位运算的方式将多个标志位相加.其中有两个模式:单行(re.DOTALL, 或者r ...

  3. 23个Python爬虫开源项目代码,让你一次学个够

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  4. DAY11、函数总结

    一.函数的对象 1.函数对象:函数名存放的就是函数的地址,所以函数名也是对像 2.函数对象的应用: 2.1.可以直接被引用   fn = cp_fn 2.2.可以当作函数参数传递    compute ...

  5. Python——编译标准

    注意事项 1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包, ...

  6. react-navigation 简介

    StackNavigator: 原理和浏览器相似但又有局限,浏览器的方式是开放性的,通过点击一个链接可以跳转到任何页面(push),点击浏览器后退按钮,返回到前一个页面(pop).StackNavig ...

  7. GitHub修改用户名

    刚开始用github时随便起了个名字,现在想修改名字了,自己研究了半天终于找到修改地方 1.点击settings 2.点击Account的Change username 3.点击下面红色的按钮 4.在 ...

  8. python中self和cls的区别

    1.self表示一个具体的实例本身.如果用了staticmethod,那么就可以无视这个self,将这个方法当成一个普通的函数使用. 2.cls表示这个类本身. >>> class ...

  9. Python【第五篇】模块、包、常用模块

    一.模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  10. jmeter5.1测试websocket接口

    jmeter没有websocket协议的取样器,需要我们自己开发,但是网上已经有大神先开发好了,[相关jar包,点击左侧加群获取] 只需要放到jmeter的ext目录(D:\apache-jmeter ...