一、简介
Filebeat是一个用于转发和集中日志数据的轻量级托运人。Filebeat作为代理安装在您的服务器上,它监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引.
我们可以将filebeat简单的作为一个搬运工的角色,既然是搬运工,则需要考虑三个问题,从哪里搬?已经搬了多少?搬到那里去?如下图所示
二、原理
Prospector(采矿者)
① 定义输入文件的路径,也就是从哪里获取数据,一般定义日志的路径,当然可以匹配多条日志路径。
② 保存文件状态信息,为每一个文件保留一个状态。
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
Harvester(收割机)
① 一个收割机负责一个日志文件,收割过程如下,打开文件,负责读取文件内容,它将逐行读取每个文件,并将读取的内容搬运到es或者kafka等。
三.问题
1.如果日志文件内容此时有360行,收割机读取日志文件已经到了360行,当项目运行产生了新的日志,收割机是从361行以后开始读取,还是从第一行读取?如果从361行读取,它是如何保存文件读取状态的呢?
毫无疑问日志接着上次的内容继续读取,也就是说从361行开始继续读取,如果从第一行读取,不仅会存在重复读取数据,在时间性能方面更差。每次haverster读取文件内容后,prospector内存中也会保存一下文件状态信息,当日志文件大小发生变化时,haverster将继续读取文件内容。
2.filebeat在搬到哪里这个过程中,也就是输出过程中是否存在数据丢失的情况?
不会,filebeat将数据输出后,会等到接收端确认已收到,如果没有接收到返回消息,filebeat将再次发送数据到接收端。它会保证至少交付一次给接收端。
av