Filebeat的工作原理—官方原版
一、概述
Filebeat是一个轻量级的转发器,用于转发和集中日志数据。Filebeat作为代理安装在您的服务器上,它监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。
Filebeat的工作原理如下:当您启动Filebeat时,它会启动一个或多个输入,这些输入会查找您为日志数据指定的位置。对于Filebeat定位的每个日志,Filebeat启动一个采集器。每个采集器为新内容读取一个日志,并将新的日志数据发送到libbeat,libbeat聚合事件并将聚合数据发送到您为Filebeat配置的输出。
二、工作原理
在本主题中,您将了解Filebeat的关键构建块以及它们如何协同工作。了解这些概念将有助于您在为特定用例配置Filebeat时做出明智的决定。
Filebeat由两个主要组件组成:输入和采集器。这些组件协同工作以跟踪文件并将事件数据发送到指定的输出。
1、采集器
采集器负责读取单个文件的内容。采集器逐行读取每个文件,并将内容发送到输出。每个文件启动一个采集器。采集器负责打开和关闭文件,这意味着在采集器运行时文件描述符保持打开状态。如果文件在获取过程中被删除或重命名,Filebeat会继续读取该文件。这样做的副作用是,磁盘上的空间被保留,直到收割机关闭。默认情况下,Filebeat会保持文件打开,直到达到close_inactive为止。
关闭采集器会产生以下后果:
- 文件处理程序关闭,如果在采集器仍在读取文件时删除了文件,则释放底层资源。
- 只有经过scan_frequency之后,才会再次开始获取文件。
- 如果在采集器关闭时移动或移除文件,则不会继续采集文件。
要控制采集器何时关闭,请使用close_*配置选项。
2、什么是输入
输入负责管理采集器并查找所有要读取的源。
如果输入类型为log,则输入会查找驱动器上与定义的glob路径匹配的所有文件,并为每个文件启动一个采集器。每个输入都在自己的Go例程中运行。
以下示例将Filebeat配置为从所有与指定glob模式匹配的日志文件中获取行:
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
- /var/path2/*.log
Filebeat目前支持多种输入类型。每个输入类型可以定义多次。日志输入检查每个文件,以查看是否需要启动采集器,采集器是否已经在运行,或者是否可以忽略该文件(请参阅ignore_older)。只有在采集器关闭后文件大小发生变化时,才会拾取新行。
3、Filebeat 如何保持文件的状态?
Filebeat 保留每个文件的状态,并经常将状态刷新到注册表文件中的磁盘。该状态用于记住收割机读取的最后一个偏移量,并确保发送所有原木行。如果无法访问输出(如 Elasticsearch 或 Logstash),Filebeat 会跟踪发送的最后一行,并在输出再次可用时继续读取文件。当 Filebeat 运行时,每个输入的状态信息也会保存在内存中。重新启动 Filebeat 时,注册表文件中的数据将用于重建状态,Filebeat 会在最后一个已知位置继续每个收割机。
对于每个输入,Filebeat 都会保留它找到的每个文件的状态。由于可以重命名或移动文件,因此文件名和路径不足以标识文件。对于每个文件,Filebeat 存储唯一标识符,以检测以前是否收集过文件。
如果您的使用案例涉及每天创建大量新文件,您可能会发现注册表文件变得太大。
4、Filebeat 如何确保至少一次交付
Filebeat 保证事件将传递到配置的输出 最少一次,不会丢失数据。Filebeat 能够实现此行为 因为它将每个事件的传递状态存储在注册表文件中。
在定义的输出被阻止且未确认所有输出的情况下 事件,Filebeat 将继续尝试发送事件,直到输出确认 它已收到事件。
如果 Filebeat 在发送事件的过程中关闭,则不会 等待输出确认所有事件,然后再关闭。任何事件 发送到输出,但在 Filebeat 关闭之前未确认, 在重新启动文件节拍时再次发送。这可确保发送每个事件 至少一次,但最终可能会将重复事件发送到 输出。您可以将 Filebeat 配置为在之前等待特定的时间量 通过设置 shutdown_timeout 选项关闭。
Filebeat的至少一次交付保证有一个限制,包括日志轮换和删除旧文件。如果日志文件写入磁盘并旋转的速度快于Filebeat处理的速度,或者如果文件在输出不可用时被删除,则数据可能会丢失。在Linux上,由于索引节点重用,Filebeat也有可能跳过行。
大家好,我是Doker品牌的Sinbad,欢迎点赞和评论,您的鼓励是我们持续更新的动力!欢迎加微信进入技术群聊!