filebeat如何工作?
主要组件:input和harvesters(采集器进程)
-
harvesters - 采集器
一个文件启动一个harvesters,一行一行读取单个文件的内容,并把这些内容发送到输出(output).harvester负责打开和关闭这个文件,这就意味着在harvester运行时文件描述符保持打开状态。
在harvester正在读取文件内容的时候,文件被删除或者重命名了,那么Filebeat会续读这个文件。这就有一个问题了,就是只要负责这个文件的harvester没用关闭,那么磁盘空间就不会释放。默认情况下,Filebeat保存文件打开直到close_inactive到达.
-
input
负责找到所有需要读取的日志,然后每个日志文件启动一个harvesters.
filebeat如何保持文件状态?
-
data目录树结构
data ├── meta.json └── registry └── filebeat ├── data.json # 存储每个文件inode和最新偏移量(json格式) └── meta.json
-
filebeat保持文件状态
filebeat每个刷新时间会保存文件读取状态待注册文件(registry)。状态用于记住harveters读取最新偏移量,并确保日志行被发送到输出。遇到的问题?
1.输出异常:filebeat会追踪发送的最后一行,只要输出再次可用继续读取文件.
filebeat如何保证至少投递一次?
filebeat会将时间的投递状态保存在注册表中,在没有收到输出确认事件时,会尝试继续发送事件,直到输出确认收到事件为止.
如果filebeat在发送事件过程关闭了,则在关闭前它不会等待输出确认所有事件。因此当filebeat启动时,发送到输出的事件有可能再次发送。可以设置shutdown_timeout选项,将filebeat配置为关闭之前等待特定时间.