解读 Filebeat:功能特性、使用要点与核心架构全掌握

第一单元 Filebeat功能介绍

1.1了解Filebeat

Filebeat是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash等进行索引。
工作的流程图如下:
在这里插入图片描述

1.2 Filebeat 特性

Filebeat 具有如下的一些特性:

正确处理日志旋转:针对每隔一个时间段生产一个新的日志的案例,Filebeat 可以帮我们正确地处理新生产的日志,并重新启动对新生成日志的处理
背压敏感:如果日志生成的速度过快,从而导致 Filebeat 生产的速度超过 Elasticsearch 处理的速度,那么 Filebeat 可以自动调节处理的速度,以达到 Elasticsearch 可以处理的范围内
“至少一次”保证:每个日志生成的事件至少被处理一次
结构化日志:可以处理结构化的日志数据数据
多行事件:如果一个日志有多行信息,也可以被正确处理,比如错误信息往往是多行数据
条件过滤:可以有条件地过滤一些事件。

1.3 Filebeat使用场景

Filebeat 在解决某些特定的问题时:日志存于文件,我们希望将日志直接传输存储到 Elasticsearch。这仅在我们只是抓去(grep)它们或者日志是存于 JSON 格式(Filebeat 可以解析 JSON)。或者如果打算使用 Elasticsearch 的 Ingest 功能对日志进行解析和丰富。
将日志发送到 Kafka/Redis。所以另外一个传输工具(例如,Logstash 或自定义的 Kafka 消费者)可以进一步丰富和转发。这里假设选择的下游传输工具能够满足我们对功能和性能的要求。

1.4 Filebeat基本命令

export   #导出
run      #执行(默认执行)
test     #测试配置
keystore #秘钥存储
modules  #模块配置管理
setup    #设置初始环境
例如: ./filebeat test config  #用来测试配置文件是否正确
export命令
将配置或索引模板导出到stdout。您可以使用此命令快速查看配置或索引模板的内容。
filebeat export SUBCOMMAND [FLAGS]
SUBCOMMANDS
config
将当前配置导出到stdout。如果使用该-c标志,则此命令将导出在指定文件中定义的配置。
template
将索引模板导出到stdout。您可以指定--es.version和 --index标志以进一步定义导出的内容。
FLAGE
--es.version VERSION 与其一起指定时template,导出与指定版本兼容的索引模板。
-h, --help 显示export命令的帮助。
--index BASE_NAME 与其一起指定时template,设置用于索引模板的基本名称。如果未指定此标志,则默认基本名称为filebeat。
 
例子:
filebeat export config
filebeat export template --es.version 6.2.4 --index myindexname
 
keystore命令
管理秘钥库
filebeat keystore SUBCOMMAND [ FLAGS ]
SUBCOMMAND
add KEY 将指定的密钥添加到密钥库。使用该--force标志覆盖现有密钥。使用--stdin标志传递值stdin
create 创建一个密钥库来保存秘密。使用该--force标志覆盖现有密钥库。
list 列出密钥库中的密钥。
remove KEY 从密钥库中删除指定的密钥。
FLAGS
--force 适用于add和create子命令。使用时add,会覆盖指定的密钥。与之一起使用时create,会覆盖密钥库。
 
--stdin 与之一起使用时add,使用stdin作为键值的来源。
-h,--help 显示keystore命令的帮助。
 
例子:
filebeat keystore create
filebeat keystore add ES_PWD
filebeat keystore remove ES_PWD
filebeat keystore list
 
modules命令
管理配置的模块。您可以使用此命令启用和禁用modules.d目录中定义的特定模块配置。使用此命令所做的更改将保留,并用于后续运行的Filebeat。
 
filebeat modules SUBCOMMAND [FLAGS]
SUBCOMMANDS
disable MODULE_LIST 禁用以空格分隔的列表中指定的模块。
 
enable MODULE_LIST 启用以空格分隔的列表中指定的模块。
 
list 列出当前启用和禁用的模块。
FLAGS
-h,--help 显示export命令的帮助。
 
例子:
filebeat modules list
filebeat modules enable apache2 auditd mysql
 
run命令
运行Filebeat。如果在未指定命令的情况下启动Filebeat,则默认使用此命令。
 
filebeat run [FLAGS] or filebeat [FLAGS]
FLAGS
-N, --N 禁用将事件发布到已定义的输出。此选项仅用于测试Filebeat。
--cpuprofile FILE 将CPU配置文件数据写入指定的文件。此选项对于Filebeat故障排除很有用。
-h, --help 显示run命令的帮助。
--httpprof [HOST]:PORT 启动http服务器以进行性能分析。此选项对于故障排除和分析Filebeat很有用。
--memprofile FILE 将内存配置文件数据写入指定的输出文件。此选项对于Filebeat故障排除很有用。
--modules MODULE_LIST 指定要运行的以逗号分隔的模块列表。例如:
filebeat run --modules nginx,mysql,system
您可以使用该modules命令启用和禁用特定模块,而不是每次运行Filebeat时指定模块列表。然后,当您运行Filebeat时,它将运行任何已启用的模块。
--once 使用该once标志时,Filebeat将启动所有已配置的收集器和探测器,并运行每个探测器,直到收割机关闭。如果设置了--once标志,则还应设置close_eof为在达到文件末尾时关闭收割机。默认情况下,收割机在close_inactive到达后关闭。
--setup 加载示例Kibana仪表板。如果要在不运行Filebeat的情况下加载仪表板,请改用setup命令。
 
例子:filebeat run -e --setup
 
setup命令
设置初始环境,包括索引模板,Kibana仪表板(如果可用)和机器学习作业(如果可用)。
索引模板可确保在Elasticsearch中正确映射字段。
Kibana仪表板使您可以更轻松地在Kibana中可视化Filebeat数据。
机器学习作业包含分析异常数据所需的配置信息和元数据。
使用此命令而不是run --setup在不实际运行Filebeat和摄取数据的情况下设置环境。
 
filebeat setup [FLAGS]
FLAGS
--dashboards 仅设置Kibana仪表板。此选项从Filebeat包加载仪表板。有关更多选项,例如加载自定义仪表板,请参阅Beats开发人员指南 中的导入现有节拍仪表板。
-h, --help 显示setup命令的帮助。
--machine-learning 仅设置机器学习作业配置。
--modules MODULE_LIST 指定以逗号分隔的模块列表。当filebeat.yml文件中没有定义模块时,使用此标志可以避免错误。
--template 仅设置索引模板。
例子:filebeat setup --dashboards
 
test命令
测试配置
filebeat test SUBCOMMAND [FLAGS]
SUBCOMMAND
config 测试配置设置
output 测试Filebeat可以使用当前设置连接到输出。
FLAGS
-h, --help 显示test命令的帮助。
例子:filebeat test config
 
version命令
显示有关当前版本的信息。
filebeat version [FLAGS]
-h, --help 显示version命令的帮助。
 
全局标志
运行Filebeat时,可​​以使用这些全局标志。
-E, --E "SETTING_NAME=VALUE" 覆盖特定的配置设置。您可以指定多个覆盖。例如:filebeat -E "name=mybeat" -E "output.elasticsearch.hosts=["http://myhost:9200"]" 此设置适用于当前运行的Filebeat进程。Filebeat配置文件未更改。
 
-M, --M "VAR_NAME=VALUE" 覆盖Filebeat模块的默认配置。您可以指定多个变量覆盖。例如:filebeat -modules=nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" -M "nginx.access.var.pipeline=no_plugins"
 
-c, --c FILE 指定用于Filebeat的配置文件。您在此处指定的文件是相对于path.config。如果-c未指定标志filebeat.yml,则使用默认配置文件。
 
-d, --d SELECTORS 启用指定选择器的调试。对于选择器,您可以指定以逗号分隔的组件列表,也可以使用它-d "*"来启用所有组件的调试。例如,-d "publish"显示所有“发布”相关消息。
 
-e, --e 记录到stderr并禁用syslog/file输出。
--path.config 设置配置文件的路径
--path.data 设置数据文件的路径
--path.home 设置其他文件的路径
--path.logs 设置日志文件的路径
--strict.perms 设置对配置文件的严格权限检查。默认是 -strict.perms=true
-v, --v 记录INFO级别的消息。

更多命令参考:
https://www.elastic.co/guide/en/beats/filebeat/current/command-line-options.html

第二单元 Filebeat核心概念

1.Filebeat的工作原理

1.1 filebeat的构成

Filebeat由两个主要组件组成:prospector和harvester。
这些组件一起工作来读取文件(tail file)并将事件数据发送到您指定的输出启动Filebeat时,它会启动一个或多个查找器,查看您为日志文件指定的本地路径。对于prospector所在的每个日志文件,prospector启动harvester。每个harvester都会为新内容读取单个日志文件,并将新日志数据发送到libbeat,后者将聚合事件并将聚合数据发送到您为Filebeat配置的输出。

1.1.1 Prospector 组件
prospector负责管理harvester并找到所有要读取的文件来源。
如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
每个prospector都在自己的Go协程中运行。
Filebeat目前支持两种prospector类型:log和stdin。
每个prospector类型可以定义多次。
日志prospector检查每个文件以查看harvester是否需要启动,是否已经运行,
或者该文件是否可以被忽略(请参阅ignore_older)。
只有在harvester关闭后文件的大小发生了变化,才会读取到新行。

1.1.2 harvester 组件
harvester:负责读取单个文件的内容。读取每个文件,并将内容发送到the output
每个文件启动一个harvester,harvester负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态
如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
这有副作用,即在harvester关闭之前,磁盘上的空间被保留。默认情况下,Filebeat将文件保持打开状态,直到达到close_inactive状态

关闭harvester会产生以下结果:

  1. 如果在harvester仍在读取文件时文件被删除,则关闭文件句柄,释放底层资源。
  2. 文件的采集只会在scan_frequency过后重新开始。
  3. 如果在harvester关闭的情况下移动或移除文件,则不会继续处理文件。
    要控制收割机何时关闭,请使用close_*配置选项

1.2 filebeat如何保存文件的状态

Filebeat保留每个文件的状态,并经常将状态刷新到磁盘中的注册表文件中。该状态用于记住harvester读取的最后一个偏移量,并确保发送所有日志行。如果无法访问输出(如Elasticsearch或Logstash),Filebeat将跟踪最后发送的行,并在输出再次可用时继续读取文件。当Filebeat运行时,每个输入的状态信息也保存在内存中。当Filebeat重新启动时,来自注册表文件的数据用于重建状态,Filebeat在最后一个已知位置继续每个harvester。对于每个输入,Filebeat都会保留它找到的每个文件的状态。由于文件可以重命名或移动,文件名和路径不足以标识文件。对于每个文件,Filebeat存储唯一的标识符,以检测文件是否以前被捕获。

1.3 filebeat何如保证至少一次数据消费

Filebeat保证事件将至少传递到配置的输出一次,并且不会丢失数据。是因为它将每个事件的传递状态存储在注册表文件中。在已定义的输出被阻止且未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认已接收到事件为止。如果Filebeat在发送事件的过程中关闭,它不会等待输出确认所有事件后再关闭。当Filebeat重新启动时,将再次将Filebeat关闭前未确认的所有事件发送到输出。这样可以确保每个事件至少发送一次,但最终可能会有重复的事件发送到输出。通过设置shutdown_timeout选项,可以将Filebeat配置为在关机前等待特定时间。

2.Filebeat 模块

在这里插入图片描述
Filebeat 模块简化了常见日志格式的收集,解析和可视化。文件集包含以下内容:

Filebeat 输入配置,其中包含在其中查找日志文件的默认路径。 这些默认路径取决于操作系统。 Filebeat 配置还负责在需要时将多行事件缝合在一起。
Elasticsearch Ingest Node 管道定义,用于解析日志行。
字段定义,用于为每个字段配置具有正确的 Elasticsearch 类型,它们还包含每个字段的简短说明。
示例 Kibana 仪表板(如果有)可用于可视化日志文件。
Filebeat 会根据你的环境自动调整这些配置,并将它们加载到相应的 Elastic Stack 组件中。

一个典型的模块(例如,对于 Nginx 日志)由一个或多个文件集(对于 Nginx,访问和错误日志)组成,比如,Nginx 模块解析 NGINX HTTP 服务器创建的访问和错误日志。它在幕后执行如下的一些任务:

设置日志文件的默认路径(你可以更改)
确保每个多行日志事件都作为单个事件发送
使用 ingest node 来解析和处理日志行
将数据塑造成适合在 Kibana 中进行可视化的结构
部署仪表板以可视化日志数据
针对其它的 Beats 模块来说,基本和 Filebeat 一样。

3.Filebeat配置文件

prospector(input)段配置
filebeat.prospectors:

每一个prospectors,起始于一个破折号”-“
-
input_type: log #默认log,从日志文件读取每一行。stdin,从标准输入读取

paths:

日志文件路径列表,可用通配符,不递归
-
/var/log/*.log

encoding:
plain #编码,默认无,plain(不验证或者改变任何输入),
latin1, utf-8, utf-16be-bom, utf-16be, utf-16le, big5, gb18030, gbk, hz-gb-2312, euc-kr, euc-jp, iso-2022-jp, shift-jis

include_lines:
[‘^ERR’,
‘^WARN’]

匹配行,后接一个正则表达式列表,默认无,如果启用,则filebeat只输出匹配行,如果同时指定了多行匹配,仍会按照include_lines做过滤
exclude_lines:
[“^DBG”]

排除行,后接一个正则表达式的列表,默认无
exclude_files:
[“.gz$”]

排除文件,后接一个正则表达式的列表,默认无
ignore_older:
0 #排除更改时间超过定义的文件,时间字符串可以用2h表示2小时,5m表示5分钟,默认0

document_type:
log #该type会被添加到type字段,对于输出到ES来说,这个输入时的type字段会被存储,默认log

scan_frequency:
10s #prospector扫描新文件的时间间隔,默认10秒

max_bytes:
10485760 #单文件最大收集的字节数,单文件超过此字节数后的字节将被丢弃,默认10MB,需要增大,保持与日志输出配置的单文件最大值一致即可

multiline.pattern:
^[ #多行匹配模式,后接正则表达式,默认无

multiline.negate:
false

多行匹配模式后配置的模式是否取反,默认false
multiline.match:
after #定义多行内容被添加到模式匹配行之后还是之前,默认无,可以被设置为after或者before

multiline.max_lines:
500 #单一多行匹配聚合的最大行数,超过定义行数后的行会被丢弃,默认500

multiline.timeout:
5s #多行匹配超时时间,超过超时时间后的当前多行匹配事件将停止并发送,然后开始一个新的多行匹配事件,默认5秒

tail_files:
false

可以配置为true和false。配置为true时,filebeat将从新文件的最后位置开始读取,如果配合日志轮循使用,新文件的第一行将被跳过
close_renamed:
false

当文件被重命名或被轮询时关闭重命名的文件处理。注意:潜在的数据丢失。请务必阅读并理解此选项的文档。默认false
close_removed:
true

如果文件不存在,立即关闭文件处理。如果后面文件又出现了,会在scan_frequency之后继续从最后一个已知position处开始收集,默认true
enabled:
true

每个prospectors的开关,默认true
filebeat全局配置
filebeat.spool_size:
2048 #后台事件计数阈值,超过后强制发送,默认2048

filebeat.idle_timeout:
5s #后台刷新超时时间,超过定义时间后强制发送,不管spool_size是否达到,默认5秒

filebeat.registry_file:
${path.data}/registry

注册表文件,同logstash的sincedb,记录日志文件信息,如果使用相对路径,则意味着相对于日志数据的路径
filebeat.config_dir:

定义filebeat配置文件目录,必须指定一个不同于filebeat主配置文件所在的目录,目录中所有配置文件中的全局配置会被忽略
通用配置段
name:

配置发送者名称,如果不配置则使用hostname
tags:
[“service-X”,
“web-tier”]

标记tag,可用于分组
fields:

添加附件字段,可以使values,arrays,dictionaries或者任何嵌套数据
env:
staging

queue_size:
1000 #处理管道中单个事件内的队列大小,默认1000

max_procs:

设置最大CPU数,默认为CPU核数
processors配置段
Outputs配置段
output.elasticsearch:

elasticsearch输出模块
enabled:
true

启用模块
hosts:
[“localhost:9200”]

ES地址
compression_level:
0 #gzip压缩级别,默认0,不压缩,压缩耗CPU

worker:
1 #每个ES的worker数?????,默认1

index:
“filebeat-%{+yyyy.MM.dd}”

可选配置,ES索引名称,默认filebeat-%{+yyyy.MM.dd}
pipeline:
“”

可选配置,输出到ES接收节点的pipeline,默认无
path:
“/elasticsearch”

可选的,HTTP路径,默认无
proxy_url:
http://proxy:3128

http代理服务器地址,默认无
max_retries:
3 #ES重试次数,默认3次,超过3次后,当前事件将被丢弃

bulk_max_size:
50 #对一个单独的ES批量API索引请求的最大事件数?????默认50

timeout:
90 #到ES的http请求超时时间?????默认90秒

output.logstash:

logstash输出模块
enabled:
true

启用模块
hosts:
[“localhost:5044”]

logstash地址
worker:
1 #每个logstash的worker数?????,默认1

compression_level:
3 #压缩级别,默认3

loadbalance:
true

负载均衡开关,在不同的logstash间负载
pipelining:
0 #在处理新的批量期间,异步发送至logstash的批量次数?????

index:
‘filebeat’

可选配置,索引名称,默认为filebeat
proxy_url:
socks5://user:password@socks5-server:2233

socks5代理服务器地址
proxy_use_local_resolver:
false

使用代理时是否使用本地解析,默认false
output.kafka:

kafka输出模块
output.redis:

redis输出模块
enabled:
true

启用模块
hosts:
[“localhost:6379”]

redis地址,地址为一个列表,如果loadbalance开启,则负载到里表中的服务器,当一个redis服务器不可达,事件将被分发到可到达的redis服务器
port:
6379 #redis端口,如果hosts内未包含端口信息,默认6379

key:
filebeat #事件发布到redis的list或channel,默认filebeat

password:

redis密码,默认无
db:
0 #redis的db值,默认0

datatype:
list #发布事件使用的redis数据类型,如果为list,使用RPUSH命令(生产消费模式)。如果为channel,使用PUBLISH命令{发布订阅模式}。默认为list

worker:
1 #为每个redis服务器启动的工作进程数,会根据负载均衡配置递增

loadbalance:
true

负载均衡,默认开启
timeout:
5s #redis连接超时时间,默认5s

max_retries:
3 #filebeat会忽略此设置,并一直重试到全部发送为止,其他beat设置为0即忽略,默认3次

bulk_max_size:
2048 ##对一个redis请求或管道批量的最大事件数,默认2048

proxy_url:

socks5代理地址,必须使用socks5://
proxy_use_local_resolver:
false

使用代理时是否使用本地解析,默认false
Paths配置段
path.home:

家目录,filebeat安装目录,为其他所有path配置的默认基本路径,默认为filebeat二进制文件的本地目录
path.config:
${path.home} #filebeat配置路径,主配置文件和es模板的默认基本路径,默认为filebeat家目录

path.data:
${path.home}/data

filebeat数据存储路径,默认在filebeat家目录下
path.logs:
${path.home}/logs

filebeat日志存储路径,默认在filebeat家目录下
logging配置段
有3个可配置的filebeat日志输出选项:syslog,file,stderr
windows默认输出到file
logging.level:
info #设定日志级别,可设置级别有critical,
error, warning, info, debug

logging.selectors:
[ ] #开启debug输出的选择组件,开启所有选择使用[“*”],其他可用选择为”beat”,”publish”,”service”

logging.to_syslog:
true

输出所有日志到syslog,默认为false
logging.metrics.enabled:
true

定期记录filebeat内部性能指标,默认true
logging.metrics.period:
30s #记录内部性能指标的周期,默认30秒

logging.to_files:
true

输出所有日志到file,默认true
logging.files:

日志输出的文件配置
path:
/var/log/filebeat

配置日志输出路径,默认在家目录的logs目录
name:
filebeat #日志文件名

rotateeverybytes:
10485760 #日志轮循大小,默认10MB

keepfiles:
7 #日志轮循文件保存数量,默认7

harvester收割者
负责读取每个文件的内容,收割者一行一行的读取每个文件并发送内容到output,收割者负责打开和关闭文件。

prospector勘探者
负责管理收割者和查找所有读取源。目前勘探者支持两个勘探类型,log和stdin,每个勘探类型可以被定义多次。龙勘探者检查每个文件来看是否需要打开一个收割者或收割者是否在运行,诱惑是否忽略这个文件。

filebeat如何保持文件状态?
filebeat保持每个文件的状态并频繁刷新状态到磁盘上的注册文件
状态用于记忆收割者读取的最后一个偏移量并确保所有的日志行被发送
如果一个es或logstash的输出不可达时,filebeat将持续追踪发送的最后一样并继续读取文件,尽快可以变为可用的输出
当filebeat运行时,状态信息将被每个勘探者保存在内存中
当filebeat被重启,会使用注册文件读取数据重建状态,并且让每个收割者从一直的最后位置开始
每个勘探者为他发现的每个文件保持一个状态,因为文件可能被删除或移动,文件名和路径不足以确定一个文件

multiline.negate和match组合
negate
match

false after 连续匹配的行将被添加到前一个不匹配的行
false before 连续匹配的行将被预合并到后一个不匹配的行

true after 连续不匹配的行将被添加到前一个匹配的行
true before 连续不匹配的行将被预合并到后一个匹配的行

注意:filebeat.registry_file,由于此配置是filebeat的全局配置,所以如果需要分开存储registry_file则必须拆分filebeat配置文件和进程。
而logstash的sincedb配置是input.file段配置,每个input可以单独指定sincedb

注意:如果如果output.redis的datatype使用list,redis在没有阻塞的情况下是看不到该list的

详细配置可见:
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值