beats是一个开放源代码的数据发送器。我们可以把beats作为一种代理安装在我们的服务器上,这样就可以比较方便地将数据发送到elasticsearch或者logstash中。elastic stack提供了多种类型的beats组件。
beats可以直接将数据发送到elasticsearch或者发送到logstash, 基于logstash可以进一步地对数据进行处理,然后将处理后的数据存入到elasticsearch,最后使用kibana进行数据可视化。
filebeat简介
filebeat专门用于转发和收集日志数据的轻量级采集工具。它可以作为代理安装在服务器上,filebeat监视指定路径的日志文件,收集日志数据,并将收集到的日志转发到elasticsearch或者logstash。
filebeat的工作原理
启动filebeat时,会启动一个或者多个输入(input),这些input监控指定的日志数据位置。filebeat会针对每一个文件启动一个harvester(收割机)。harvester读取每一个文件的日志,将新的日志发送到libbeat,libbeat将数据收集到一起,并将数据发送给输
出(output)。
在filebeat的配置中,专门有一个解决一条日志跨多行问题的配置。主要为以下三个配置:
multiline.pattern:表示能够匹配一条日志的模式,默认配置的是以[开头的才认为是一条新的日志。 ^[表示匹配以[开头的消息
multiline.negate:配置为false,正常匹配(默认),表示不需要取反,配置为true,表示取反
multiline.match:表示是否将未匹配到的行追加到上一日志,还是追加到下一个日志。
filebeat是如何工作的
filebeat主要由input和harvesters(收割机)组成。这两个组件协同工作,并将数据发送到指定的输出。
input是负责管理harvesters和查找所有要读取的文件的组件
如果输入类型是 log,input组件会查找磁盘上与路径描述的所有文件,并为每个文件启动一个harvester,每个输入都独立地运行
harvesters负责读取单个文件的内容,它负责打开/关闭文件,并逐行读取每个文件的内容,将读取到的内容发送给输出
每个文件都会启动一个harvester
harvester运行时,文件将处于打开状态。如果文件在读取时,被移除或者重命名,filebeat将继续读取该文件
filebeats如何保持文件状态
filebeat保存每个文件的状态,并定时将状态信息保存在磁盘的「注册表」文件中
该状态记录harvester读取的最后一次偏移量,并确保发送所有的日志数据
如果输出(elasticsearch或者logstash)无法访问,filebeat会记录成功发送的最后一行,并在输出(elasticsearch或者logstash)可用时,继续读取文件发送数据
在运行filebeat时,每个input的状态信息也会保存在内存中,重新启动filebeat时,会从「注册表」文件中读取数据来重新构建状态。
在filebeat-7.6.1-linux-x86_64/data目录中有一个registry文件夹,里面有一个data.json,该文件中记录了harvester读取日志的offset。
删除「注册表」/data.json也就是删除日志收集时记录的位置,删除后则会从头开始收集