参考:https://www.elastic.co/guide/en/beats/filebeat/index.html
Filebeat是一个轻量级的代理,用于转发和集中日志数据。Filebeat作为代理安装在服务器上,监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。
以下是Filebeat的工作原理:
启动Filebeat时,它会启动一个或多个输入(inputs),这些输入将查找您为日志数据指定的位置。对于Filebeat找到的每个日志,Filebeat启动一个收集器(harvester)。每个收集器为新内容读取单个日志,并将新日志数据发送到libbeat,libbeat聚合事件并将聚合数据发送到您为Filebeat配置的输出。Filebeat是一个Elastic Beat。它基于libbeat框架。
Filebeat隶属于Beats。目前Beats包含六种工具:
Filebeat由两个主要组件组成:输入inputs和收集器harvesters。这些组件一起工作以tail file并将事件数据发送到您指定的输出。
什么是harvesters?
harvesters负责读取单个文件的内容。harvesters逐行读取每个文件,并将内容发送到输出。为每个文件启动一个harvesters。harvesters负责打开和关闭文件,这意味着文件描述符在harvesters运行时保持打开状态。如果文件在被收集时被删除或重命名,Filebeat将继续读取该文件。这会产生副作用,即在harvesters关闭之前,磁盘上的空间是保留的。默认情况下,Filebeat会保持文件处于打开状态,直到close_inactive达到。
关闭harvesters会产生以下后果:
什么是input?
输入负责管理harvesters并查找要读取的所有源。
如果输入类型为log,则输入将查找驱动器上与定义的glob路径匹配的所有文件,并为每个文件启动收集器。每个输入都在自己的Go例程中运行。
以下示例将Filebeat配置为从与指定的glob模式匹配的所有日志文件中获取行:
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
- /var/path2/*.log
Filebeat目前支持多种input类型。每种输入类型都可以定义多次。该log输入检查每个文件看harvesters是否需要启动,一个人是否已经在运行,或文件是否可以忽略不计(见ignore_older)。如果自收割机关闭后文件的大小发生变化,则只会拾取新行。
Filebeat如何保持文件状态?
Filebeat保持每个文件的状态,并经常将状态刷新到注册表文件中的磁盘。状态用于记住harvesters正在读取的最后一个偏移量并确保发送所有日志行。如果无法访问输出(如Elasticsearch或Logstash),Filebeat会跟踪发送的最后一行,并在输出再次可用时继续读取文件。在Filebeat运行时,状态信息也会保存在内存中以用于每个输入。重新启动Filebeat时,来自注册表文件的数据用于重建状态,Filebeat会在最后一个已知位置继续运行每个收集器。
对于每个输入,Filebeat保持它找到的每个文件的状态。由于可以重命名或移动文件,因此文件名和路径不足以标识文件。对于每个文件,Filebeat存储唯一标识符以检测先前是否收获了文件。
如果您的用例涉及每天创建大量新文件,您可能会发现注册表文件变得过大。有关可以设置以解决此问题的配置选项的详细信息,请参阅注册表文件太大。
Filebeat如何确保至少一次交付?
Filebeat保证事件将至少一次传递到配置的输出,并且不会丢失数据。Filebeat能够实现此行为,因为它将每个事件的传递状态存储在注册表文件中。
在已定义的输出被阻止且尚未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认已收到事件。
如果Filebeat在发送事件的过程中关闭,它不会等待输出在关闭之前确认所有事件。重新启动Filebeat时,将再次发送任何发送到输出但在Filebeat关闭之前未确认的事件。这可确保每个事件至少发送一次,但最终可能会将重复事件发送到输出。您可以通过设置shutdown_timeout选项将Filebeat配置为在关闭之前等待特定时间。
注意
Filebeat的至少一次交付保证有一个限制,涉及日志轮换和旧文件的删除。如果日志文件写入磁盘并且旋转速度超过Filebeat可以处理的速度,或者在输出不可用时删除文件,则数据可能会丢失。在Linux上,由于inode重用,Filebeat也可以跳过行。有关inode重用问题的更多详细信息,请参阅 常见问题。
内容来源于网络,如有侵权,请联系作者删除!