日志采集工具Filebeat
Filebeat简介
Filebeat 是一个用Go语言编写的轻量级开源日志传送器,用于本地文件的日志数据采集,可以将日志数据发送到Logstash和Elasticsearch等。 它提供了“至少一次”保证的数据传输,并且它使用了背压敏感协议,因此不会使管道过载。
带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
Filebeat可将收集的日志原样上报,若日志源程序支持json格式输出(比如Nginx或Apache),那么可以直接上报ES。但是,还有很多程序不支持修改日志格式,比如MySQL慢日志、Linux系统日志等。因此,可使用logstash对日志数据进行结构化处理等操作并转发给指定output。
当发送数据到Logstash或Elasticsearch时,Filebeat使用一个反压力敏感(backpressure-sensitive)的协议来解释高负荷的数据量。当Logstash数据处理繁忙时,Filebeat放慢它的读取速度。一旦压力解除,Filebeat将恢复到原来的速度,继续传输数据。
一台服务器只能启动一个filebeat进程。
Filebeat适用于集群环境下,资源消耗相较于logstash小,避免了在每台服务器都部署logstash。可通过Filebeat部署在需要日志数据的服务器上采集日志数据并发送到logstash所在的服务器进行处理。
Filebeat组件
- 采集器Harvester
**Harvester负责读取单个文件的内容。**读取每个文件,并将内容发送到配置指定的output,每个文件启动一个harvester, harvester负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。
如果文件在读取时被删除或重命名,Filebeat将继续读取文件。这有副作用,即在harvester关闭之前,磁盘上的空间被保留。默认情况下,Filebeat将文件保持打开状态,直到达到close_inactive状态
关闭harvester会产生以下结果:
1)如果在harvester仍在读取文件时文件被删除,则关闭文件句柄,释放底层资源。
2)文件的采集只会在scan_frequency过后重新开始。
3)如果在harvester关闭的情况下移动或移除文件,则不会继续处理文件。
要控制harvester何时关闭,使用close_ *配置选项
- 查找器Prospector
Prospector负责管理harvester并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
Filebeat目前支持两种prospector类型:log和stdin。每个prospector类型可以定义多次。日志prospector检查每个文件来查看harvester是否需要启动,是否已经运行,或者该文件是否可以被忽略(请参阅ignore_older)。
只有在harvester关闭后文件的大小发生了变化,才会读取到新行。
另外,Filebeat prospector只能读取本地文件,没有功能可以连接到远程主机来读取存储的文件或日志。
- 配置文件
配置文件:$FILEBEAT_HOME/filebeat.yml。Filebeat可以一次读取某个文件夹下的所有后缀名为log的文件,也可以读取指定的某一个后缀名为log的文件。
Filebeat工作方式
启动Filebeat时,它会启动一个或多个查找器prospector,查看为日志文件指定的本地路径。对于prospector所找到的每个日志文件,prospector都会启动收集器harvester。每个收集器harvester都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚合事件,并将聚合的数据发送到为Filebeat配置的输出。
工作的流程图如下:
Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。
Filebeat如何弹性输出信息
Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。
Filebeat安装
安装包数据源
https://www.elastic.co/cn/downloads/beats/filebeat
Filebeat采集配置样例详细介绍
编辑filebeat.yml,遵循yaml语法;
vi /etc/filebeat/filebeat.yml
Filebeat部分主要定义prospector的列表,定义监控哪里的日志文件等等。filebeat.yml中的注释有详细信息。
type: log #input类型为log
enable: