当前位置: 首页 > article >正文

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,欢迎点赞和评论,您的鼓励是我们持续更新的动力!欢迎加微信进入技术群聊! 


http://www.kler.cn/a/6739.html

相关文章:

  • kafka基础
  • 【支持向量机(SVM)】:算法原理及核函数
  • 深度学习的实践层面
  • 代码随想录算法训练营第五十一天|Day51 图论
  • Spark RDD 的 combineByKey、cogroup 和 compute 算子的作用
  • tcp 超时计时器
  • redis中布隆过滤器使用详解
  • 分布式SQL计算平台 HIVE
  • Apsara Clouder阿里巴巴开发规范认证
  • 九大经典算法
  • 蓝桥杯省赛b组练习
  • tomcat进阶
  • doctor安装mysql jdk nginx tomcat
  • 蓝桥杯第23天(Python)(疯狂刷题第6天)
  • JAVA基于J2ME的手机游戏开发和实现——贪吃蛇
  • windows系统上设置conda和pip国内源
  • tmall.service.settleadjustment.modify( 修改结算调整单 )
  • ARM—汇编指令集
  • 2023链动2+1模式详解
  • 【对YOLOv8(ultralytics)打印测试结果的调整】(1)使得map值打印显示从0.551变为55.08 (2)打印出FPS
  • 一个的错误的演化
  • ImportError: cannot import name imread
  • RocketMQ客户端配置详解
  • CentOS7系统安装MySQL 5.7
  • FOR ALL ENTRIES IN 与 INNER JOIN 内表
  • 2023年最全前端React18面试题考点