Filebeat 是一个用于转发和集中日志数据的轻量级传送工具。作为代理安装在您的服务器上,Filebeat 监控您指定的日志文件或位置,收集日志事件,并将他们转发到 Elasticsearch 或 Logstash 以进行索引。
Filebeat由两个主要组成部分组成:prospector(探勘者)和 harvesters(矿车)。这些组建一起工作来读取文件并将事件数据发送到指定的output。
prospector负责管理harvester并找到所有要读取的文件来源。
如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
Filebeat目前支持两种prospector类型:log和stdin。
- 负责读取单个文件的内容。
- 如果文件在读取时被删除或重命名,FIlebeat将继续读取文件
当启动 Filebeat 时,它会启动一个或多个输入,这些输入会在您为日志数据指定的位置中查找。对于 FileBeat 定位的每个日志,FIlebeat 都会启动一个收集器(harvester)。每个harvester 读取单个日志以获取新内容并将新日志数据发送到 libbeat,libbeat 聚合事并将聚合数据发送到您为 Filebeat 配置的输出。
工作流程图如下:
简介:
首先filebeat是Beats中的一员。
Beats是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用logstash手机、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计,
1、Beats是 elastic 公司的一款轻量级数据采集产品,它包含了几个子产品:
1)packetbeat(用于监控网络流量,网络数据,收集网络流量数据)
2)filebeat(用于监听日志数据,日志文件,收集文件数据,可以替代logstash-input-file)
3)topbeat(用于搜集进程的信息、负载、内存、磁盘等数据)
Metricbeat(指标,收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
4)winlogbeat(用于搜集windows事件日志)
5)Auditbeat (审计数据,收集审计日志)
6)Heartbeat(运行时间监控,收集系统运行时的数据)
注:社区还提供了dockerbeat等工具(非elastic公司)
2、Filebeat 是一个开源的文件收集器,采用 go 语言开发,重构 logstash采集器源码,安装在服务器上作为代理来监视日志目录或特定的日志文件,并把它们发送到logstash 或 elasticsearch等。
3、Filebeat是代替logstash-forwarder的数据采集方案,原因是 logstash 运行在jvm上,对服务器的资源消耗比较大
因为logstash是jvm跑的,资源消耗比较大,启动一个logstash就需要消耗500M左右的内存(这就是为什么logstash启动特别慢的原因),而filebeat 只需要10几M内存资源。常用的ELK 日志采集方案中,大部分的做法就是将所有节点的日志内容通过filebeat发送到logstash,logstash根据配置文件进行过滤。然后将过滤之后的文件输送到elasticsearch中,通过kibana去展示。
filebeat结构:由两个组件构成,分别是inputs(输入)和harvesters(收集器),这些组件一起工作来跟踪文件并并事件数据发送到您指定的输出,harvester付原则读取单个文件的内容。harvester逐行读取每个文件,并将内容发送到输出。为每个文件启动一个harvester。harvester负责打开和关闭文件,这意味着文件描述符在harvester运行时保持打开状态。如果在收集文件时删除或重命名文件,FIlebeat将继续读取该文件。这样做的副作用是,磁盘上的空间一直保留到harvester关闭。默认情况下,Filebeat保持文件打开,直到达到close-inactive
关闭harvester可以会产生的结果:
一个input 负责管理harvesters 和寻找所有来源读取。如果inoput类型是log,则input在它自己的Go进程中运行,Filebeat当前支持多种输入类型。每个输入类型可以定义多次。日志输入检查每个文件,以查看是否需要启动harvester、是否已经在运行harvester或是否可以忽略该文件。
描述 | |
---|---|
filebeat | 用于启动filebeat的二进制文件 |
data | 持久化数据文件的位置 |
logs | Filebeat创建的日志的位置 |
modules.d | 简化filebeat配置的模板文件夹,如nginx/kafka等日志收集模板 |
filebeat.yml | filebeat配置文件 |
Filebeat保留每个文件的状态,并经常将状态刷新到磁盘中的注册表文件中,该状态用于记住harvester读取的最后一个偏移量,并确保发送所有日志行。如果无法访问输出(如Elasticsearch或Logstash),Filebeat将跟踪最后发送的行,并在输出在此可用时继续读取文件。当Filebeat运行时,每个输入的状态信息也保存在内存中,当Filebeat重新启动时,来自注册表文件的数据用于重建状态,Filebeat在最后一个已知位置继续每个harvester。对于每个输入,Filebeat都会保留它找到的每个文件的状态。由于文件可以重命名或移动,文件名和路径不足以标识文件。对于每个文件,Filebeat存储唯一的标识符,以检测文件是否以前被捕获。
filebeat保证事件将至少传递到配置的输出一次,并且不会丢失数据。是因为它将每个事件的传递状态存储在注册表文件中。在已定义的输出被阻止且未确认所有事件的情况下,Filebeat将继续尝试发送时间,指导输出确认已接收到事件为止。如果Filbeat在发送事件的过程中关闭,它不会等待输出确认所有事件后再关闭。当Filebeat重新启动时,将再次将Filebeat关闭前未确认的所有事件发送到输出。这样可以确保每个事件至少发送一次,但最终可能会有重复的事件发送到输出。通过设置shutdown_timeout选项,可以将Filebeat配置为在关机前等待特定时间。
当开启 filebeat 程序的时候,它会启动一个或多个探测器(prospectors)去检测指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后 filebeat 会发送集合的数据到你指定的地点。
1)Elasticsearch(推荐)
2)Logstash (推荐)
3)File
4)Console
5)Kafka
6)Redis
wget https://download.elastic.co/beats/filebeat/filebeat-1.3.0-x86_64.tar.gz
tar -zxvf filebeat-1.3.0-x86_64.tar.gz
curl -L -Ohttps://download.elastic.co/beats/filebeat/filebeat_1.3.0_amd64.deb
sudo dpkg -i filebeat_1.3.0_amd64.deb
curl -L -Ohttps://download.elastic.co/beats/filebeat/filebeat-1.3.0-x86_64.rpm
sudo rpm -vi filebeat-1.3.0-x86_64.rpm
curl -L -Ohttps://download.elastic.co/beats/filebeat/filebeat-1.3.0-darwin.tgz
tar -xzvf filebeat-1.3.0-darwin.tgz2、安装
a、下载windows zip 文件 点击下载
b、解压文件到C:/ProgramFiles
c、重命名为Filebeat
d、带看PowerShell 提示符作为管理员(右键单击PowerShell的图标,并选择以管理员身份运行)。如果您运行的是Windows XP,则可能需要下载并安装PowerShell
e、运行以下命令来安装FIlebeat作为Windows 服务
cd ‘C:\ProgramFiles\Filebeat’
C:\ProgramFiles\Filebeat> .\install-service-filebeat.ps1
Filebeat的配置文件是/etc/filebeat/filebeat.yml,遵循YAML语法。具体可以配置如下几个项目:
File beat 主要定义prospector 的列表,定义监控那里的日志文件,关于如何定义的详细信息可以参考filebeat.yml中的注释,下面主要介绍一些需要注意的地方。
/var/log/*/*.log
则只会去/var/log 目录的所有子目录中寻找以“.log”结尾的文件,而不会寻找/var/log 目录下以“.log”结尾的文件。
fields:
level: debug
fields_under_root:如果该选项设置为true,则新增fields成为顶级目录,而不是将其放在fields目录下。自定义的field 会覆盖filebeat 默认的field。例如添加如下配置:
fields:
level: debug
fields_under_root: true
sudo /etc/init.d/filebeat start
- ./filebeat -e -c filebeat.yml
- -c:配置文件位置
- -path.logs:日志位置
- -path.data:数据位置
- -path.home:家位置
- -e:关闭日志输出
- -d 选择器:启用对指定选择器的调试。对于选择器,可以指定逗号分隔的组件列表,也可以使用-d"*"为所有组件启用调试。例如,-d "publish"显示所有”publish"相关的消息。
- 后台启动filebeat
- nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 & 将所有标准输出及标准错误输出到/dev/null空设备,即没有任何输出
- nohup ./filebeat -e -c filebeat.yml > filebeat.log &
1) ps -ef |grep filebeat
2) kill 掉该进程 (kill -9 pids)
详见官网:https://www.elastic.co/guide/en/beats/filebeat/current/command-line-options.html
export #导出
run #执行(默认执行)
test #测试配置
keystore #密钥存储
modules #模块配置管理
setup #设置初始环境
例如:./filebeat test config #用来测试配置文件是否正确
支持的输入组件:
Multilinemessages,Azureeventhub,CloudFoundry,Container,Docker,GooglePub/Sub,HTTPJSON,Kafka,Log,MQTT,NetFlow,Office365ManagementActivityAPI,Redis,s3,Stdin,Syslog,TCP,UDP(最常用的额就是log)
支持的输出组件:
Elasticsearch,Logstash,Kafka,Redis,File,Console,ElasticCloud,Changetheoutputcodec(最常用的就是Elasticsearch,Logstash)
keystore主要是防止敏感信息被泄露,比如密码等,像ES的密码,这里可以生成一个key为ES-PWD,值为es的password的一个对应关系,在使用es的密码的时候就可以使用${ES_PWD}使用。
创建一个存储密码的keystore:filebeat keystore create
然后往其中添加键值对,例如:filebeat keystore add ES_PWD
使用覆盖原来键的值: filebeat keystore add ES_PWD -force
删除键值对: filebeat keystore remove ES_PWD
查看已有的键值对: filebeat keystore list
例如:后期就可以通过${ES_PWD}使用其值,例如:
output。elasticsearch.password:“${ES_PWD}”
1、type: log #input类型为log
2、enable: true #表示是该log类型配置生效
3、paths: #指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:/var/log/* /*.log
则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。
4、recursive_glob.enabled: #启用全局递归模式,例如/foo/**
包括/foo
,/foo/*
,/foo/*/*
5、encoding:#指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
6、exclude_lines: [‘^DBG’] #不包含匹配正则的行
7、include_lines: [‘^ERR’, ‘^WARN’] #包含匹配正则的行
8、harvester_buffer_size: 16384 #每个harvester在获取文件时使用的缓冲区的字节大小
9、max_bytes: 10485760 #单个日志消息可以拥有的最大字节数。max_bytes之后的所有字节都被丢弃而不发送。默认值为10MB (10485760)
10、exclude_files: [‘.gz$’] #用于匹配希望Filebeat忽略的文件的正则表达式列表
11、ingore_older: 0 #默认为0,表示禁用,可以配置2h,2m等,注意ignore_older必须大于close_inactive的值.表示忽略超过设置值未更新的文件或者文件从来没有被harvester收集
12、close_* #close_ *配置选项用于在特定标准或时间之后关闭harvester。 关闭harvester意味着关闭文件处理程序。 如果在harvester关闭后文件被更新,则在scan_frequency过后,文件将被重新拾取。 但是,如果在harvester关闭时移动或删除文件,Filebeat将无法再次接收文件,并且harvester未读取的任何数据都将丢失。
13、close_inactive #启动选项时,如果在制定时间没有被读取,将关闭文件句柄。读取的最后一条日志定义为下一次读取的起始点,而不是基于文件的修改时间。
如果关闭的文件发生变化,一个新的harverster将在scan_frequency运行后被启动。
建议至少设置一个大于读取日志频率的值,配置多个prospector来实现针对不同更新速度的日志文件。
使用内部时间戳机制,来反映记录日志的读取,每次读取到最后一行日志时开始倒计时使用2h 5m 来表示
14、close_rename #当选项启动,如果文件被重命名和移动,filebeat关闭文件的处理读取
15、close_removed #当选项启动,文件被删除时,filebeat关闭文件的处理读取这个选项启动后,必须启动clean_removed
16、close_eof #适合只写一次日志的文件,然后filebeat关闭文件的处理读取
17、close_timeout #当选项启动时,filebeat会给每个harvester设置预定义时间,不管这个文件是否被读取,达到设定时间后,将被关闭
18、close_timeout 不能等于ignore_older,会导致文件更新时,不会被读取如果output一直没有输出日志事件,这个timeout是不会被启动的,至少要要有一个事件发送,然后haverter将被关闭
设置0 表示不启动
19、clean_inactived #从注册表文件中删除先前收获的文件的状态
设置必须大于ignore_older+scan_frequency,以确保在文件仍在收集时没有删除任何状态
配置选项有助于减小注册表文件的大小,特别是如果每天都生成大量的新文件
此配置选项也可用于防止在Linux上重用inode的Filebeat问题
20、clean_removed #启动选项后,如果文件在磁盘上找不到,将从注册表中清除filebeat
如果关闭close removed 必须关闭clean removed
21、scan_frequency #prospector检查指定用于收获的路径中的新文件的频率,默认10s
22、tail_files:#如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。
23、symlinks:#符号链接选项允许Filebeat除常规文件外,可以收集符号链接。收集符号链接时,即使报告了符号链接的路径,Filebeat也会打开并读取原始文件。
24、backoff: #backoff选项指定Filebeat如何积极地抓取新文件进行更新。默认1s,backoff选项定义Filebeat在达到EOF之后再次检查文件之间等待的时间。
25、max_backoff: #在达到EOF之后再次检查文件之前Filebeat等待的最长时间
26、backoff_factor: #指定backoff尝试等待时间几次,默认是2
27、harvester_limit:#harvester_limit选项限制一个prospector并行启动的harvester数量,直接影响文件打开数28、tags #列表中添加标签,用过过滤,例如:tags: [“json”]
29、fields #可选字段,选择额外的字段进行输出可以是标量值,元组,字典等嵌套类型
30、fields_under_root #如果值为ture,那么fields存储在输出文档的顶级位置31、multiline.pattern #必须匹配的regexp模式
32、multiline.negate #定义上面的模式匹配条件的动作是 否定的,默认是false
假如模式匹配条件’^b’,默认是false模式,表示讲按照模式匹配进行匹配 将不是以b开头的日志行进行合并
如果是true,表示将不以b开头的日志行进行合并
33、multiline.match # 指定Filebeat如何将匹配行组合成事件,在之前或者之后,取决于上面所指定的negate
34、multiline.max_lines #可以组合成一个事件的最大行数,超过将丢弃,默认500
35、multiline.timeout #定义超时时间,如果开始一个新的事件在超时时间内没有发现匹配,也将发送日志,默认是5s
36、max_procs #设置可以同时执行的最大CPU数。默认值为系统中可用的逻辑CPU的数量。
37、name #为该filebeat指定名字,默认为主机的hostname
filebeat.inputs:
- type: log ①
paths:
- /var/log/system.log
- /var/log/wifi.log
- type: log ②
paths:
- "/var/log/apache2/*"
fields:
apache: true
fields_under_root: true
① 表示从system.log
和 wifi.log
收集日志
② 表示收集 apache2
文件夹下的所有内容,并且使用fields 配置项将apache
字段添加到输出中的根节点
paths
:待收集日志的路径列表,可以为每行指定一个路径,每行以破折号(-)开头。Filebeat 会为它在指定路径下找到的每个文件启动一个harvester(收集器)
encoding
:读取数据时使用的编码
exclude_lines
:filebeat 会删除与列表中正则表达式匹配的任何行,默认情况下,不会删除任何行。忽略空行,如
filebeat.inputs:
- type: log
...
exclude_lines: ['^DBG']
删除DBG开头的行。
include_lines
:filebeat只会导出与列表中正则表达式匹配的任何行,默认情况下,将导出所有行。忽略空行,如
filebeat.inputs:
- type: log
...
include_lines: ['^ERR', '^WARN']
只导出ERR/WARN 开头的数据
enabled
:使用enabled
去启用或禁用inputs,默认设置为true
tags
:Filebeat在每个已发布事件的标记字段中包含的标记列表。标记使得在Kibana中选择特定事件或在Logstash 中应用条件过滤变得很容易。这些标记将被附加到常规配置中指定的标记列表中。
filebeat.inputs:
- type: log
. . .
tags: ["json"]
fields
:可选字段,您可以指定将附加信息添加到输出中。例如,可以添加可用于筛选日志数据的字段。字段可以是标量值、数组、字典或他们的任何嵌套组合。默认情况下,此处指定的字段将分组到输出文档的字段字典下。如
filebeat.inputs:
- type: log
. . .
fields:
app_id: query_engine_12
fields_under_root
:将自定义字段显示为顶级字段
processors
:可以过滤和增强导出的数据。使用exclude_lines
、include_lines
可以达到过滤数据的作用,缺点是需要为每个配置问价配置所需的筛选条件。
每个处理器接受一个事件,对事件应用定义的操作,然后返回事件。如果定义处理器列表,则按照在Filebeat配置文件中定义的顺序执行这些处理器。
可以在配置中定义处理器,以便在事件被发送到配置的输出之前对其进行处理,libbeat类库提供的处理器可以处理以下内容:
如 删除DBG开头的行
processors:
- drop_event:
when:
regexp:
message: "^DBG:"
如删除来自某个日志文件的所有日志消息
processors:
- drop_event:
when:
contains:
source: "test"
output.console:
pretty: true
pretty
:如果 pretty 设置为true,则写入stdout的时间将被格式化。默认值为false
codec
:输出编解码器配置。如果缺少编解码器部分,事件将使用“pretty”选项进行json编码。
enabled
:enabled config 是用于启用或禁用输出的布尔设置。如果设置为false,则禁用输出
output.elasticsearch:
hosts: ["https://localhost:9200"]
index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
ssl.certificate: "/etc/pki/client/cert.pem"
ssl.key: "/etc/pki/client/cert.key"
hosts
:要连接到的ElasticSearch节点的列表。事件按循环顺序分发到这些节点。如果一个节点无法访问,则事件将自动返送到另一个节点。每个Elas节点都可以定义为URL或IP:PORT。若没有指定port,则默认是9200
index
:索引名称。默认的格式是filebeat-%{[beat.version]}-%{+yyyy.MM.dd}
(如filebeat-6.5.4-2022-09-23)。如果修改了这个配置,则必须同时配置setup.template.name
和setup.template.pattern
output.logstash:
hosts: ["127.0.0.1:5044"]
hosts
:指定配置的LogStash服务器和监听的端口。
1)logstash-forwarder(elastic)
2)scribe(FaceBook)
3)chukwa(Apache)
4)flume(Cloudera)
5)fluentd
1、Filebeat(采集数据)+ Elasticsearch(建立索引)+ Kibana(展示)
2、Filebeat(采集数据)+ Logstash(过滤)+ Elasticsearch(建立索引) + Kibana(展示)
3、Filebeat(采集数据)+ Kafka/Redis/File/Console(数据传输) + 应用程序(处理,存储,展示)
4、Filebeat(采集数据)+ Logstash(过滤)+ Kafka/Redis/File/Console(数据传输)+ 应用程序(处理,存储,展示)
注:Redis/File/Console 如何判断增量是一个问题