Author:rab
1、问题 ❓
在实际测试/生产中会存在这么一个问题,如果输出目标 Kafka、ES、Kibana
无法连接(访问)时,Filebeat
如何保持文件状态?该文件内容是否成功发送给输出?
2、答案 ✔️
答案是可以的,Filebeat 会保存每个文件的状态
,它会把注册表文件中的状态
刷新到磁盘,该状态记录了harvester
读取文件的最后一个偏移量,如果此时无法访问 Elasticsearch 或 Logstash 等输出,Filebeat 会跟踪发送的最后几行,并在输出再次可用时继续读取文件
,从而确保发送所有日志行。
在 Filebeat 运行时,每个输入的状态信息也会保存在内存中。当 Filebeat 重新启动时,来自注册表文件的数据用于重建状态,并且 Filebeat 在最后一个已知位置继续每个 harvester
(即继续采集当前最新数据并输出到输出目标)。
也就是说只有 Filebeat
将 harvester
到的日志内容成功发送到输出目标(Kafka、ES、Kibana),且直到输出确认它已收到事件时,才会开启下一轮的 harvester
。如果在发送事件的过程中关闭 Filebeat
,它不会在关闭前等待输出确认所有事件是否收到,任何发送到输出但在 Filebeat 关闭之前未确认的事件,在 Filebeat 重新启动时会再次发送。这可确保每个事件至少发送一次,但最终可能会将重复的事件发送到输出。我们可以通过设置 shutdown_timeout
选项将 Filebeat 配置为在关闭之前等待特定的时间。
更多问题,请参考官方文档