第二篇 filebeat工作原理
一.介绍
filebeat主要由二个组件构成:input 和 harvesters。
1.1 什么是harvesters
harvesters叫收割机,负责读取单个文件的内容, harvesters逐行读取每个文件,并机内容发送到output。harvesters负责打开和关闭文件,这意味着在harvesters运行时文件描述符保持打开状态。
如果文件在收集过程中被删除或重命名,filebeat会继续读取该文件,这样做的副作用是保留磁盘上的空间,直到harvesters关闭,默认情况下,filebeat会保持文件打开,直到close_incative到达
关闭一个harvesters会有以下后果:
1) 关闭文件处理程序,如果harvesters仍在读取文件时删除文件,则释放底层资源。
2) scan_frequency文件的收集只有在过去 之后才会重新开始。
3) 如果在harvesters关闭时移动或移除文件,文件的收集将不会继续。
1.2 什么是input
input叫输入,负责管理harvesters并查找所有要读取的源。
如果input类型为log, 则输入查找驱动器上与定义的全局路径匹配的所有文件,并为每个文件启动一个收集器。每个input都在自己的 Go routine 中运行。
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log
目前filebeat支持的input类型见文档:
1.3 filebeat 如何保持文件的状态
filebeat 会保存每个文件的状态,并经常在注册表文件中将状态刷新到磁盘,该状态用于记住harvesters读取的最后一个偏移量,并确保发送所有日志行。如果无法访问es或logstash等output,filebeat 会跟踪发送的最后几行,并在output再次可用时继续读取文件。
filebeat 运行时,每个input的状态信息也会保存在内存中,当filebeat重新启动时,来自注册表的数据用于重建状态,并且filebeat 在最后一个已知位置继续每个harvesters。
对于每于input,Filebeat 都会保存它找到的每个文件的状态。因为文件可以重命名或移动,所以文件名和路径不足以识别文件。对于每个文件,Filebeat 都会存储唯一标识符,以检测文件是否以前被收集过。
如果您的用例涉及每天创建大量新文件,您可能会发现注册表文件变得太大。有关可以设置以解决此问题的配置选项的详细信息,请参阅注册表文件太大。
1.4 filebeat 如何确保至少一次交付
filebeat 保证事件将至少传递到配置的output一次,并且不会丢失数据。Filebeat 能够实现这种行为是因为它将每个事件的传递状态存储在注册表文件中。
在定义的output被阻塞且未确认所有事件的情况下,Filebeat 将继续尝试发送事件,直到output确认它已收到事件。比如es 连接中断了。