Filebeat — harvester、input


Filebeat包含两个主要组件:input和harvester。这些组件一起工作来追踪文件并将事件数据发送到您指定的输出。

harvester

harvester负责读取单个文件的内容。

harvester逐行读取每个文件,然后将内容发送到output。

每个文件启动一个harvester。harvester负责打开和关闭文件,这意味着在harvester运行时文件描述符保持打开状态。如果在收集文件时将其删除或重命名,Filebeat将继续读取该文件。这样做的副作用是磁盘上的空间将保留到harvester关闭为止。

关闭harvester具有以下后果:

  • 关闭文件处理程序,如果在harvester仍在读取文件时删除了文件,则释放了基础资源。
  • 只有在scan_frequency经过之后,才会再次开始文件的收集。
  • 如果在harvester关闭时移动或删除文件,则文件的读取将不会继续。

input

input负责管理harvest并查找所有可读取的资源。

如果输入类型为log,则输入将查找驱动器上与已定义的全局路径匹配的所有文件,并为每个文件启动harvest。每个输入都在其自己的Go协程中运行。

Filebeat当前支持多种input类型。每个输入类型可以定义多次。

Filebeat如何保持文件状态?

Filebeat保留每个文件的状态,并经常将状态刷新到注册表文件中的磁盘。该状态用于记住harvester正在读取的最后一个偏移量,并确保发送所有日志行。如果无法到达output(例如Elasticsearch或Logstash),则Filebeat会跟踪发送的最后几行,并在输出再次可用时继续读取文件。在Filebeat运行时,状态信息也将保存在内存中以供每个输入使用。重新启动Filebeat时,将使用注册表文件中的数据来重建状态,并且Filebeat会在最后一个已知位置继续每个harvester。

对于每个输入,Filebeat会保持找到的每个文件的状态。由于可以重命名或移动文件,因此文件名和路径不足以标识文件。对于每个文件,Filebeat都存储唯一的标识符以检测文件是否以前被获取过。

Filebeat如何确保至少一次传递?

Filebeat保证事件将至少一次传递到配置的输出,并且不会丢失数据。Filebeat之所以能够实现此行为,是因为它在注册表文件中存储了每个事件的传递状态。

在定义的输出被阻止并且尚未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认它已接收到事件为止。

如果Filebeat在发送事件的过程中关闭,则它不会在关闭之前等待输出确认所有事件。除了Filebeat关闭前没有确认的事件,任何被发送到输出的事件会在Filebeat重启时再次发送。这样可以确保每个事件至少发送一次,但是最终可能会将重复的事件发送到输出。您可以通过设置shutdown_timeout选项将Filebeat配置为在关闭之前等待特定的时间。

Filebeat的至少一次传送保证存在局限性,涉及日志轮换和旧文件的删除。如果将日志文件写入磁盘并且旋转速度比Filebeat可以处理的速度快,或者如果在输出不可用时删除了文件,则数据可能会丢失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_李少侠_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值