Filebeat简介
Filebeat是一个轻量级的收集日志和传输日志的工具(一直觉得Filebeat是存储数据,并非的它只是作一个收集传输功能);Filebeat安装在每个你想要收集日志的服务器上,至关于客户端。Filebeat监控你指定的日志文件或者路径,收集日志事件向Elasticsearch或者Logstach进行索引。
简单理解Filebeat是如何工做的
当你启动Filebeat,它开始监视你指定的一个或多个文件或路径。Filebeat定位的每一个日志,Filebeat开始启动一个harvester。每一个harvester读取到一个日志的新内容就发送到libbeat,聚合起来而后把聚合的数据发送到你设置输出的地方,如elasticsearch,logstach等。如图:
Filebeat是如何工做的
两个组件:
inputs harvesters 这两个组件一块儿工做跟踪文件并将事件发送到指定的输出。
harvesters(收割机,谷歌翻译的,哈哈,也能够这么理解,由于是去收集文件并传输确认也像收割机)
职责:harvesters负责收取单个文件的内容。harvesters读取文件,一行一行的读取文件,并将内容发送到Output。
每一个文件启动一个harvester,harvester负责打开或关闭一个文件,这意味着当harvest运行时文件描述符处于打开状态。若是文件在获取过程当中被移走了或者被重名了,Filebeat会继续读取文件,这样作的反作用是磁盘上的空间被一直占用着直到harvester被关闭。默认状况下,Filebeat会保持打开状态直到close_inactive信号到达。
input
职责:找到全部的读取来源和管理harvesters
假如文件来源是log,那么input会找到全部定义下匹配的文件而且给每一个文件开启一个harvester,如:
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log
Filebeat目前支持的输入类型
Log、
Stdin、
Redis、
UDP、
Docker、
TCP、
Syslog、
NetFlow,每一个输入类型能够定义屡次,log输入会检查每一个文件是否须要启动harvester,是否已经启动或者能够忽略这个文件,当harvester关闭后只有文件大小被改变新的行才会拾取新的行。
Filebeat如何保持文件的状态
一、Filebeat保持每一个文件的状态,并常常将该状态刷新到磁盘上的注册表文件;这个状态用于记住harvester的最后偏移量,并确保发送全部日志行。若是对于Output像Elasticsearch或者Logstach,送达不到,那么Filebeat继续跟踪最后的发送行,一旦Output再次可用,它将继续读取文件。
二、Filebeat运行时,状态信息也会保存在每一个input的内存中;当Filebeat重启后,注册表文件中的状态用于重建数据,Filebeat在最后已知的位置使harvester继续收集日志。
三、
对于每个输入,Filebeat保存每一个找到的文件的状态。由于文件可能会被重命名或者移动,文件名和路径不足以标识文件。对于每个文件,Filebeat会存储惟一标识符以检测文件是否在以前获取。
Filebeat是如何确保至少一次交付的
一、Filebeat保证事件将至少一次传输到配置的输出而且不会有数据丢失,Filebeat可以实现这种行为是由于他将每一个事件的传递状态存储存储在注册表文件中。
二、在定义的Output被阻塞且未确认全部的事件的状况下,Filebeat将会继续尝试发送事件直到输出确认接收到事件为止。
三、
若是Filebeat在发送事件的过程当中关闭,他不会在关闭以前等待Output确认全部事件。发送到Output的任何事件,在Filebeat关闭以前没有获得确认,当Filebeat从新启动时会再次发送。这就确保任何事件至少被发送了一次,但有可能你会发送重复的事件到Output。能够经过设置shutdown_timeout选项让Filebeat在关闭以前等待必定的时间。
四、Filebeat的至少一次交互有一个限制当涉及到日志轮训和删除旧文件时,若是日志文件被写入磁盘轮询的速度快于Filebeat的处理的速度,或者当output不能使用的时候删除了文件,数据可能会丢失。在Linux上,Filebeat也有可能会由于inode的重用跳过一些行。
本身想的的几个问题(暂时未去验证)
一、Input正常,Output不正常,当Output正常后,是怎么发送收集到的数据的,是从Output不正常时最后确认收到的文件事件后,从没有确认的那一个开始传送,仍是从不正常以后,到正常这段时间的数据都不会再有?
二、Input不正常,Output正常,当Input正常后,数据是怎么发送的
官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html#harvester