Filebeat介绍

Filebeat概览

Filebeat 是一个轻量级的传送器,用于转发和集中日志数据。Filebeat 作为代理安装在您的服务器上,监控您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash以进行索引。

Filebeat 的工作原理如下:当您启动 Filebeat 时,它会在指定的日志数据的位置启动一个或多个查找的inputs。对于 Filebeat 找到的每个日志,Filebeat 都会启动一个收集器(harvester)。每个harvester读取单个日志的新内容,并将新日志数据发送到 libbeat。libbeat聚合事件并将聚合数据发送到您为 Filebeat 配置的输出。

Beats design

Filebeat 是一个elastic beat。它基于libbeat框架。

Beats

https://www.elastic.co/cn/beats/

Beats平台参考

https://www.elastic.co/guide/en/beats/libbeat/7.13/index.html

Filebeat工作原理

有关input和harvester的更多信息:https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html

Filebeat由两个主要组件组成:input和harvester。组件共同作用于日志文件尾部,然后将事件数据发送到指定的output。

什么是harvester?

harvester负责读取单个文件的内容。为每个文件起一个harvesrer,harvester逐行读取文件,并将内容发送到output。

harvester负责打开和关闭文件,这意味着文件描述符在harvester运行时保持打开状态。如果在获取文件时删除或重命名了文件,Filebeat将继续读取该文件。这样做的副作用是,在harvester关闭之前,磁盘上的空间是保留的。

默认情况下,Filebeat保持文件打开,直到close_inactive。

关闭harvester有以下后果:

如果在harvester仍在读取文件时删除了文件,则文件处理程序将关闭,从而释放底层资源。

文件的收集将在scan_frequency结束后重新开始。

如果在harvester关闭时移动或移除文件,则不会继续收割文件。

要控制harvester何时关闭,可以调用 close_*配置选项。

什么是input?

input负责管理harvester,并且负责找到所有要读取的源。

如果输入类型为log,则input会查找磁盘上与定义的全局路径匹配的所有文件,并为每个文件启动harvester。每个input都在自己的goroutine(go语言的协程)中运行。

以下示例将 Filebeat 配置为从与指定的 glob 模式匹配的所有日志文件中收集行:

filebeat.inputs:
- type: log
  paths:
    - /var/log/*.log
    - /var/path2/*.log

Filebeat 目前支持多种input类型。每个输入类型可以定义多次。该log类型的input检查每个文件的harvester是否需要启动,是否已经在运行,或文件是否可以忽略不计(见ignore_older)。仅当harvester关闭后,文件的大小发生变化时才会收集新行。

Filebeat如何持久化文件的状态?

Filebeat 保持每个文件的状态,并经常将状态刷新注册表文件中的数据到磁盘中。该状态用于记住haevester读取的最后一个偏移量,并确保发送所有日志行。

如果无法访问output(例如 Elasticsearch 或 Logstash),Filebeat 会跟踪发送的最后一行,并在output再次可用时继续读取文件。

当 Filebeat 运行时,每个输入的状态信息也保存在内存中。当 Filebeat 重新启动时,来自注册表文件的数据用于重建状态,Filebeat从最后一个已知位置继续运行hasverter 。

对于每个input,Filebeat 会保留它找到的每个文件的状态。由于文件可以重命名或移动,文件名和路径不足以识别文件。对于每个文件,Filebeat 存储唯一标识符以检测之前是否收集了文件。

如果您的用例涉及每天创建大量新文件,您可能会发现注册表文件变得太大。有关可以设置以解决此问题的配置选项的详细信息,请参阅https://www.elastic.co/guide/en/beats/filebeat/current/reduce-registry-size.html

Filebeat如何确保at-least-once-delivery(至少一次交付)?

Filebeat 保证事件将至少一次传送到配置的output,并且没有丢失数据。Filebeat 能够实现这种行为,因为它将每个事件的传递状态存储在注册表文件中。

在定义的output被阻塞并且没有确认所有事件的情况下,Filebeat 将继续尝试发送事件,直到output确认它已收到事件。

如果 Filebeat 在发送事件的过程中关闭,它不会在关闭之前等待输出确认所有事件。任何发送到output但在 Filebeat 关闭之前未确认的事件,将在 Filebeat 重新启动时再次发送。这可确保每个事件至少发送一次,但最终可能会将重复的事件发送到output。您可以通过设置shutdown_timeout选项将 Filebeat 配置为在关闭之前等待特定时间。

Filebeat 的至少一次交付保证存在限制,涉及日志轮换和删除旧文件时。如果将日志文件写入磁盘并以比 Filebeat 处理它们的速度快的速度,或者如果在output不可用时删除文件,则数据可能会丢失。在 Linux 上,Filebeat 也有可能因 inode 重用而跳过行。有关inode 重用问题的更多详细信息,请参阅https://www.elastic.co/guide/en/beats/filebeat/current/faq.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值