配置Filebeat编辑
在修改配置设置之前,请确保您已完成入门指南中的 配置步骤。本部分介绍了一些常用的用于更改配置选项的用例。
要配置Filebeat,请编辑配置文件。对于rpm和deb,你会在找到配置文件/etc/filebeat/filebeat.yml
。还有一个完整的示例配置文件 /etc/filebeat/filebeat.reference.yml
,显示所有不被弃用的选项。对于mac和win,请查看您提取的存档。
Filebeat配置文件的语法使用YAML。有关配置文件结构的更多信息,请参阅Beats平台参考的配置文件格式部分 。
以下主题介绍如何配置Filebeat:
- 指定要运行的模块
- 成立探矿者
- 管理多行消息
- 指定一般设置
- 加载外部配置文件
- 配置内部队列
- 配置输出
- 负载平衡输出主机
- 指定SSL设置
- 筛选并增强导出的数据
- 使用摄取节点解析日志
- 设置项目路径
- 设置Kibana端点
- 加载Kibana仪表板
- 加载Elasticsearch索引模板
- 配置日志记录
- 在配置中使用环境变量
- 自动发现
- YAML技巧和陷阱
- 正则表达式支持
- filebeat.reference.yml
指定要运行的模块
使用Filebeat模块是可选的。如果您使用的是不受支持的日志文件类型,或者您想使用其他设置,则可以决定 手动设置探勘器。
Filebeat 模块为您提供了快速开始处理常用日志格式的方法。它们包含默认配置,Elasticsearch摄入节点管道定义和Kibana仪表板,以帮助您实施和部署日志监视解决方案。
Filebeat提供了几种不同的方式来启用模块。您可以:
在具有POSIX文件权限的系统上,所有Beats配置文件都受到所有权和文件权限检查。有关更多信息,请参阅 Beats平台参考中的配置文件所有权和权限。
启用模块时,还可以 指定变量设置以更改模块的默认行为,并且可以指定 高级设置来覆盖探勘器设置。
在启用模块的情况下运行Filebeat之前,请确保您还设置了使用Kibana仪表板的环境。有关更多信息,请参阅常见日志格式的快速入门。
在编辑modules.d
目录中启用模块配置
该modules.d
目录包含Filebeat中所有可用模块的默认配置。您可以modules.d
通过运行 modules enable
或modules disable
命令启用或禁用特定的模块配置。
例如,要在 目录中启用apache2
和mysql
配置modules.d
,您可以使用:
./filebeat modules enable apache2 mysql
然后,当您运行Filebeat时,会加载modules.d
目录中指定的相应模块配置(例如modules.d/apache2.yml
和 modules.d/mysql.yml
)。
要查看启用和禁用模块的列表,请运行:
./filebeat modules list
默认的模块配置假设您正在收获的日志位于OS所期望的位置,并且模块的行为适合您的环境。要更改默认配置,您需要指定变量设置。请参阅指定变量设置。
运行Filebeat 编辑时启用模块
要在命令行运行Filebeat时启用特定的模块,可以使用该--modules
标志。当您开始使用这种方法时,您需要在每次运行Filebeat时指定不同的模块和设置。在命令行中指定的任何模块都将与在配置文件或modules.d
目录中启用的任何模块一起加载。如果有冲突,则使用命令行中指定的配置。
下面的示例示出了如何启用和运行nginx
,mysql
和 system
模块。
./filebeat -e --modules nginx,mysql,system
默认的模块配置假设您正在收获的日志位于OS所期望的位置,并且模块的行为适合您的环境。要更改默认配置,您需要指定变量设置。请参阅指定变量设置。
在filebeat.yml
文件编辑中启用模块配置
如果可能的话,你应该使用modules.d
目录中的配置文件。
但是,如果从Filebeat的先前版本升级并且不想将模块配置移动到目录,则直接在配置文件中启用模块是一种实用的方法modules.d
。您可以继续在该filebeat.yml
文件中配置模块,但是modules
由于该命令需要modules.d
布局,因此您将无法使用该命令来启用和禁用配置。
要启用filebeat.yml
配置文件中的特定模块,可以将条目添加到filebeat.modules
列表中。列表中的每个条目都以破折号( - )开始,然后是该模块的设置。
下面的示例示出了运行的配置nginx
,mysql
和 system
模块。
filebeat.modules: - module: nginx - module: mysql - module: system
默认的模块配置假设您正在收获的日志位于OS所期望的位置,并且模块的行为适合您的环境。要更改默认配置,您需要指定变量设置。请参阅指定变量设置。
指定变量设置
每个模块和文件集都有变量,您可以设置这些变量来更改模块的默认行为,包括模块查找日志文件的路径。例如,var.paths
以下示例中的设置将设置nginx
访问日志文件的路径:
- module: nginx access: var.paths: ["/var/log/nginx/access.log*"]
要在命令行设置Nginx访问日志文件的路径,请使用-M
标志。例如:
./filebeat -M "nginx.access.var.paths=[/var/log/nginx/access.log*]"
在命令行设置变量时,变量名称需要包含模块和文件集名称。您可以指定多个覆盖。每个覆盖必须以-M
。
在这里你可以看到如何使用-M
国旗和--modules
国旗。此示例显示如何设置访问和错误日志的路径:
./filebeat --modules nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" -M "nginx.error.var.paths=[/var/log/nginx/error.log*]"
有关可以为每个文件集设置的特定变量的信息,请参阅模块的文档。
高级设置
在幕后,每个模块启动一个Filebeat探矿者。高级用户可以添加或覆盖任何探矿者设置。例如,你可以设置close_eof到true
在模块配置:
- module: nginx access: prospector: close_eof: true
或者像这样的命令行:
./filebeat -M "nginx.access.prospector.close_eof=true"
在这里,您将看到如何将-M
国旗与国旗一起使用--modules
:
./filebeat --modules nginx -M "nginx.access.prospector.close_eof=true"
您可以使用通配符一次更改多个模块/文件集的变量或设置。例如,以下命令启用 模块close_eof
中的所有文件集nginx
:
./filebeat -M "nginx.*.prospector.close_eof=true"
以下命令启用close_eof
由任何模块创建的所有探矿者:
./filebeat -M "*.*.prospector.close_eof=true"
设置探矿者
Filebeat模块为通用日志格式提供了最快速的入门体验。请参阅常见日志格式的快速入门 以了解如何开始使用模块。另请参阅 指定运行哪些模块以获取有关启用和配置模块的信息。
Filebeat使用探勘器来定位和处理文件。要配置Filebeat,可以filebeat.prospectors
在filebeat.yml
配置文件的部分 指定一个探测器列表。
列表中的每个项目都以破折号( - )开头,并指定探测器特定的配置选项,包括搜寻的文件路径列表。
这是一个示例配置:
filebeat.prospectors: - type: log paths: - /var/log/apache/httpd-*.log - type: log paths: - /var/log/messages - /var/log/*.log
配置选项编辑
type
编辑
以下输入类型之一:
- 日志:读取日志文件的每一行(默认)。
- stdin:读入标准
- redis:从redis中读取慢日志条目(实验性)。
- udp:通过UDP读取事件。另见编辑。
max_message_size
- docker:从Docker中读取日志。另见编辑(实验)。
containers
您在此处指定的值将用作type
发布到Logstash和Elasticsearch的每个事件。
paths
编辑
应该被抓取和抓取的基于全局路径的列表。Golang Glob支持的所有模式也支持这里。例如,要从预定义级别的子目录中获取所有文件,可以使用以下模式:/var/log/*/*.log
。这.log
将从所有子文件夹中提取所有文件/var/log
。它不从/var/log
文件夹本身提取日志文件。可以使用可选recursive_glob
设置递归地获取目录的所有子目录中的所有文件。
Filebeat为在指定路径下找到的每个文件启动收割机。您可以为每行指定一个路径。每行以短划线( - )开头。
recursive_glob.enabled
编辑
启用扩展**
到递归全局模式。启用此功能后,**
每个路径中的最右边将扩展为固定数量的全局模式。例如:/foo/**
扩展到/foo
,/foo/*
,/foo/*/*
,等等。如果启用,则将单个扩展**
为8级深度*
模式。
此功能默认启用,设置recursive_glob.enabled
为false将其禁用。
encoding
编辑
用于读取包含国际字符的文件的文件编码。请参阅W3C推荐的在HTML5中使用的编码名称。
以下是W3C推荐的一些示例编码:
- utf-16be,utf-16be,big5,gb18030,gbk,hz-gb-2312,
- euc-kr,euc-jp,iso-2022-jp,shift-jis等等
该plain
编码是特殊的,因为它不验证或转换任何输入。
exclude_lines
编辑
正则表达式的列表,以匹配您希望Filebeat排除的行。Filebeat删除与列表中正则表达式匹配的所有行。默认情况下,不会删除行。
如果多行同时指定时,线通过过滤前的各多行消息被组合成一个单一的线exclude_lines
。
以下示例配置Filebeat以删除以“DBG”开头的所有行。
filebeat.prospectors: - paths: - /var/log/myapp/*.log exclude_lines: ['^DBG']
请参阅正则表达式支持以获取支持的正则表达式模式列表。
include_lines
编辑
正则表达式的列表,以匹配您希望Filebeat包含的行。Filebeat仅导出与列表中正则表达式匹配的行。默认情况下,所有行都被导出。
如果多行同时指定时,线通过过滤前的各多行消息被组合成一个单一的线include_lines
。
以下示例将Filebeat配置为导出以“ERR”或“WARN”开头的所有行:
filebeat.prospectors: - paths: - /var/log/myapp/*.log include_lines: ['^ERR', '^WARN']
如果两个include_lines
和exclude_lines
定义,Filebeat执行include_lines
,然后再执行exclude_lines
。这两个选项的定义顺序无关紧要。该include_lines
选项将始终在exclude_lines
选项之前执行,即使exclude_lines
之前include_lines
在配置文件中出现。
以下示例导出除调试消息(DBG)以外的所有Apache日志行:
include_lines: ['apache'] exclude_lines: ['^DBG']
请参阅正则表达式支持以获取支持的正则表达式模式列表。
exclude_files
正则表达式的列表,以匹配您希望Filebeat忽略的文件。默认情况下没有文件被排除。
以下示例将Filebeat配置为忽略所有具有gz
扩展名的文件:
exclude_files: ['\.gz$']
请参阅正则表达式支持以获取支持的正则表达式模式列表。
tags
Beat包含在tags
每个发布事件的字段中的标签列表。标签可以很容易地在Kibana中选择特定的事件,或者在Logstash中应用条件过滤。这些标签将被追加到一般配置中指定的标签列表中。
例:
filebeat.prospectors: - paths: ["/var/log/app/*.json"] tags: ["json"]
fields
您可以指定的可选字段将其他信息添加到输出。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值,数组,字典或这些的任何嵌套组合。默认情况下,您在此处指定的字段将被分组在fields
输出文档的子字典下。要将自定义字段存储为顶级字段,请将该fields_under_root
选项设置为true。如果在通用配置中声明了重复字段,则其值将被此处声明的值覆盖。
filebeat.prospectors: - paths: ["/var/log/app/*.log"] fields: app_id: query_engine_12
fields_under_root
如果此选项设置为true,则自定义字段将作为顶级字段存储在输出文档中,而不是在fields
子字典下进行分组 。如果自定义字段名称与由Filebeat添加的其他字段名称冲突,则自定义字段会覆盖其他字段。
processors
要应用于探矿者生成的数据的处理器列表。
有关在配置中指定处理器的信息,请参阅筛选并增强导出的数据。
ignore_older
如果启用此选项,Filebeat将忽略在指定时间范围之前修改的任何文件。ignore_older
如果您长时间保存日志文件,配置可能特别有用。例如,如果要启动Filebeat,但只想从上周发送最新的文件和文件,则可以配置此选项。
您可以使用2小时(2小时)和5分钟(5分钟)的时间字符串。默认值是0,禁用设置。注释掉配置与将其设置为0的效果相同。
你必须设置ignore_older
为大于close_inactive
。
受此设置影响的文件分为两类:
- 从未收获的文件
- 收获的文件,但没有更新的时间超过
ignore_older
对于以前从未见过的文件,偏移量状态设置为文件末尾。如果一个状态已经存在,偏移量不会改变。在稍后再次更新文件的情况下,在设置的偏移位置继续读取。
该ignore_older
设置依赖于文件的修改时间来确定文件是否被忽略。如果在将行写入文件(可能发生在Windows上)时文件的修改时间未更新,则ignore_older
即使稍后添加了内容,该设置也可能会导致Filebeat忽略文件。
要从注册表文件中删除以前收获的文件的状态,请使用clean_inactive
配置选项。
在探矿者可以忽略一个文件之前,它必须关闭。为了确保文件在被忽略时不再被采集,你必须设置ignore_older
一个比close_inactive
。
如果当前正在收割的文件落入ignore_older
,收割机将首先完成读取文件并在close_inactive
达到后关闭文件。然后,之后,该文件将被忽略。
close_*
的close_*
配置选项用于之后的某一标准或时间以关闭收割机。关闭收割机意味着关闭文件处理程序。如果在收割机关闭后文件被更新,文件将在scan_frequency
经过之后再被拾取。但是,如果在收割机关闭的情况下移动或删除文件,Filebeat将无法再次拾取文件,收割机未读取的任何数据将丢失。
close_inactive
启用此选项时,Filebeat将关闭文件句柄(如果文件尚未在指定的时间内收获)。定义期间的计数器从收割机读取最后一个日志行开始。它不是基于文件的修改时间。如果关闭的文件再次发生变化,则启动一台新的收割机,最后一次更改将在scan_frequency
经过之后被拾取。
我们建议您设置close_inactive
一个大于日志文件最不频繁更新的值。例如,如果您的日志文件每隔几秒更新一次,则可以安全地设置close_inactive
为1m
。如果日志文件的更新率非常不同,则可以使用具有不同值的多个探测器配置。
设置close_inactive
为较低的值意味着文件句柄更快关闭。然而,这具有副作用,即如果收割机关闭,则不近实时地发送新的日志行。
关闭文件的时间戳不取决于文件的修改时间。相反,Filebeat使用内部时间戳来反映文件上次收获的时间。例如,如果close_inactive
设置为5分钟,则在收割机读取文件的最后一行之后,开始倒计时5分钟。
您可以使用2小时(2小时)和5分钟(5分钟)的时间字符串。默认值是5米。
close_renamed
如果您明白数据丢失是潜在的副作用,则只能使用此选项。
启用此选项时,文件重命名时Filebeat会关闭文件处理程序。例如,在旋转文件时发生这种情况。默认情况下,采集器保持打开状态并持续读取文件,因为文件处理程序不依赖于文件名。如果close_renamed
启用该选项,并且文件被重命名或移动的方式不再与为探矿者指定的文件模式匹配,则文件将不会再被拾取。Filebeat不会完成读取文件。
WINDOWS:如果您的Windows日志轮换系统由于无法旋转文件而显示错误,则应启用此选项。
close_removed
启用此选项后,Filebeat会在删除文件时关闭收割机。通常情况下,文件只能在指定的时间内无效后才能被删除close_inactive
。但是,如果文件被提前删除,而您没有启用close_removed
,Filebeat会保持打开文件以确保收割机已经完成。如果此设置导致文件因磁盘太早从磁盘中删除而未完全读取,请禁用此选项。
该选项默认启用。如果您禁用此选项,则还必须禁用clean_removed
。
WINDOWS:如果您的Windows日志轮换系统由于无法旋转文件而显示错误,请确保启用此选项。
close_eof
如果您明白数据丢失是潜在的副作用,则只能使用此选项。
启用此选项后,Filebeat会在文件结束时立即关闭文件。当您的文件只写入一次而不是不时更新时,这非常有用。例如,当您将每个日志事件写入新文件时,都会发生这种情况。该选项默认是禁用的。
close_timeout
如果您明白数据丢失是潜在的副作用,则只能使用此选项。另一个副作用是多线事件在超时到期之前可能不会完全发送。
启用此选项时,Filebeat会为每个收割机提供预定义的生命周期。无论阅读器在文件中的哪个位置,阅读都将在close_timeout
这段时间结束后停止。如果您只想在文件上花费预定义的时间,则此选项可用于较旧的日志文件。虽然close_timeout
在预定义超时后关闭文件,但如果文件仍在更新中,探矿者将根据定义再次启动新的收割机scan_frequency
。此收割机的close_timeout将重新开始,同时暂停倒计时。
该选项在输出被阻塞的情况下特别有用,这使得Filebeat即使对于从磁盘中删除的文件也保持打开的文件处理程序。设置close_timeout
为5m
确保文件定期关闭,以便操作系统释放它们。
如果设置close_timeout
为相等ignore_older
,则在收割机关闭的情况下修改文件时,文件不会被拾取。这些设置的组合通常会导致数据丢失,并且不会发送完整的文件。
当您使用close_timeout
包含多行事件的日志时,收割机可能会停在多行事件的中间,这意味着只会发送部分事件。如果收割机再次启动并且文件仍然存在,则只会发送事件的第二部分。
这个选项默认设置为0,这意味着它被禁用。
clean_*
这些clean_*
选项用于清理注册表文件中的状态条目。这些设置有助于减小注册表文件的大小,并可以防止潜在的inode重用问题。
clean_inactive
如果您明白数据丢失是潜在的副作用,则只能使用此选项。
启用此选项后,Filebeat会在指定的非活动时间段过去后移除文件的状态。如果文件已被Filebeat忽略(文件比文件早ignore_older
),则只能删除状态。该clean_inactive
设置必须大于ignore_older + scan_frequency
在收集文件时确保没有状态被删除。否则,该设置可能会导致Filebeat不断地重新发送全部内容,因为clean_inactive
移除了探测器 仍然检测到的文件的状态。如果文件更新或再次出现,则从头开始读取文件。
该clean_inactive
配置选项是有用的,以减少注册表文件的大小,特别是如果每天都在产生大量的新文件。
此配置选项对于防止Linux上的inode重用导致的Filebeat问题也很有用。有关更多信息,请参阅Inode重用会导致Filebeat跳过行吗?编辑。
每次文件被重命名,文件状态被更新,计数器clean_inactive
再次从0开始。
clean_removed
启用此选项后,Filebeat将清除注册表中的文件(如果在最后一个已知名称下不能在磁盘上找到)。这意味着收割机完成后重命名的文件将被删除。该选项默认启用。
如果共享驱动器在短时间内消失并再次出现,则会从头开始再次读取所有文件,因为状态已从注册表文件中删除。在这种情况下,我们建议您禁用该clean_removed
选项。
如果您也禁用,则必须禁用此选项close_removed
。
scan_frequency
探矿者在指定收获的路径中检查新文件的频率。例如,如果您指定一个glob /var/log/*
,则使用指定的频率扫描目录中的文件 scan_frequency
。指定1以尽可能频繁地扫描目录,而不会导致Filebeat过于频繁地扫描。我们不建议设置此值<1s
。
如果您需要近实时发送日志行,请不要使用非常低的日志行,scan_frequency
但应调整close_inactive
以使文件处理程序保持打开状态并不断轮询您的文件。
默认设置是10秒。
scan.sort
此功能是实验性的,可能会在将来的版本中完全更改或删除。弹性将采取尽最大努力解决任何问题,但实验功能不受支持官方GA功能的SLA。
如果您为此设置指定空字符串以外的值,则可以确定是使用升序还是降序scan.order
。可能的值是modtime
和filename
。按文件修改时间排序,使用modtime
,否则使用filename
。将此选项留空以禁用它。
如果为此设置指定值,则可以使用此选项scan.order
来配置文件是按升序还是降序扫描。
默认设置被禁用。
scan.order
此功能是实验性的,可能会在将来的版本中完全更改或删除。弹性将采取尽最大努力解决任何问题,但实验功能不受支持官方GA功能的SLA。
指定当scan.sort
设置为none以外的值时是使用升序还是降序。可能的值是asc
或desc
。
默认设置是asc
。
harvester_buffer_size
每个采集器在获取文件时使用的缓冲区的大小(以字节为单位)。默认是16384。
max_bytes
单个日志消息可以拥有的最大字节数。之后的所有字节max_bytes
被丢弃并且不被发送。此设置对于可能变大的多行日志消息特别有用。默认值是10MB(10485760)。
json
这些选项使得Filebeat能够解码构造为JSON消息的日志。Filebeat逐行处理日志,所以JSON解码只在每行有一个JSON对象时才起作用。
解码发生在行滤波和多行之前。如果您设置了message_key
选项,您可以将JSON解码与过滤和多行结合使用。在应用程序日志被包装在JSON对象中的情况下,这可能会很有用,就像Docker发生的情况一样。
配置示例:
json.keys_under_root: true json.add_error_key: true json.message_key: log
您必须至少指定以下设置之一来启用JSON解析模式:
keys_under_root
默认情况下,解码后的JSON放在输出文档中的“json”键下。如果启用此设置,则会将键复制到输出文档的顶层。默认值是false。
overwrite_keys
如果keys_under_root
启用此设置,那么来自解码的JSON对象的值会覆盖Filebeat通常添加的字段(类型,源,偏移量等)以防冲突。
add_error_key
如果启用此设置,则在出现JSON解组错误或者message_key
在配置中定义了a 但不能使用的情况下,Filebeat将添加“error.message”和“error.type:json”键。
message_key
一个可选的配置设置,用于指定应用行筛选和多行设置的JSON密钥。如果指定,键必须位于JSON对象的顶层,并且与键关联的值必须是字符串,否则不会发生过滤或多行聚合。
multiline
控制Filebeat如何处理跨越多行的日志消息的选项。有关配置多行选项的更多信息,请参阅管理多行消息。
tail_files
如果此选项设置为true,Filebeat开始在每个文件的末尾读取新文件,而不是开始。将此选项与日志循环结合使用时,可能会跳过新文件中的第一个日志条目。默认设置是false。
该选项适用于Filebeat尚未处理的文件。如果您之前运行Filebeat并且文件的状态已经保存,tail_files
则不适用。收获将继续在前一个抵消。要应用于tail_files
所有文件,您必须停止Filebeat并删除注册表文件。请注意,这样做会删除以前的所有状态。
您可以使用此设置来避免在第一次对一组日志文件运行Filebeat时对旧的日志行进行索引。第一次运行之后,我们建议禁用此选项,否则您可能会在文件旋转过程中丢失行。
pipeline
摄取节点管道标识,用于为探矿者生成的事件设置。
管道标识也可以在Elasticsearch输出中配置,但是这个选项通常会导致更简单的配置文件。如果在探矿者和输出中都配置了管道,则探矿者的选项就是所使用的选项。
symlinks
该symlinks
选项允许Filebeat除了常规文件之外还收集符号链接。收集符号链接时,Filebeat会打开并读取原始文件,即使它报告符号链接的路径。
当您配置收集符号链接时,请确保排除原始路径。如果单个探矿者配置为收集符号链接和原始文件,则探矿者将检测到该问题并仅处理其找到的第一个文件。但是,如果配置了两个不同的探勘器(一个读取符号链接,另一个读取原始路径),则将采集两个路径,导致Filebeat发送重复数据,探矿者覆盖彼此的状态。
symlinks
如果符号链接到日志文件的文件名中包含额外的元数据,并且您想要在Logstash中处理元数据,则该选项可能很有用。例如,这是Kubernetes日志文件的情况。
由于此选项可能会导致数据丢失,因此默认情况下会禁用该选项。
backoff
退避选项指定Filebeat如何积极地搜索打开的文件以进行更新。在大多数情况下,您可以使用默认值。
该backoff
选项定义Filebeat在到达EOF后再次检查文件之前等待的时间。默认值是1秒,这意味着如果添加了新行,每秒都会检查一次文件。这使近乎实时的爬行。每次在文件中出现新行时,该backoff
值都将重置为初始值。默认值是1s。
max_backoff
达到EOF后再次检查文件之前Filebeat等待的最长时间。在检查文件多次退出后,max_backoff
无论指定什么 ,等待时间都不会超过backoff_factor
。因为读取新行最多花费10s,因此指定10s max_backoff
意味着如果Filebeat已经多次退出,最坏情况下可以将新行添加到日志文件中。默认值是10秒。
要求:max_backoff应始终设置为max_backoff <= scan_frequency
。如果max_backoff
应该更大,建议关闭文件处理程序,而不要让探矿者重新拾取文件。
backoff_factor
此选项指定等待时间增加的速度。回退因子越大,max_backoff
数值越快。退避系数呈指数增长。允许的最小值为1.如果此值设置为1,则禁用退避算法,并将该backoff
值用于等待新行。这个backoff
值会每次乘以backoff_factor
直到 max_backoff
达到。默认值是2。
harvester_limit
该harvester_limit
选项限制了一个探矿者并行启动的收割机的数量。这直接关系到打开的文件处理程序的最大数量。默认为harvester_limit
0,这意味着没有限制。如果要采集的文件数超过操作系统的打开文件处理程序限制,则此配置很有用。
设置收割机数量的限制意味着并不是所有的文件都是并行打开的。因此,我们建议您将此选项与选项结合使用,close_*
以确保收割机更经常停止,以便能够拾取新文件。
目前,如果一台新的收割机可以再次启动,收割机将随机挑选。这意味着收割机刚刚关闭,然后再次更新的收割机可能会启动,而不是收割机收集长时间没有收割的文件。
这个配置选项适用于每个探矿者。您可以使用此选项,通过分配更高限制的收割机,间接地为某些探矿者设置更高的优先级。
enabled
该enabled
选项可与每个探矿者一起使用,以定义探矿者是否启用。默认情况下,enabled被设置为true。
max_message_size
与...一起使用时type: udp
,指定通过UDP接收的消息的最大大小。默认值是10240。
containers
此功能是实验性的,可能会在将来的版本中完全更改或删除。弹性将采取尽最大努力解决任何问题,但实验功能不受支持官方GA功能的SLA。
这些选项仅在使用docker
探勘器类型时可用。他们允许配置容器列表来读取日志。
Docker探矿者将在其路径下搜索容器日志,并将其解析为常见的消息行,并提取时间戳。一切都发生在行筛选,多行和JSON解码之前,因此可以与它们结合使用。
配置示例:
containers.ids: - '8b6fe7dc9e067b58476dc57d6986dd96d7100430c5de3b109a99cd56ac655347'
当使用docker
探矿者类型时,你必须定义containers.ids
,这些都是可用的设置:
ids
必需的,要从中读取日志的Docker容器ID列表'*'
可以用作从所有容器中读取的ID。
path
Docker日志所在的基本路径。默认是/var/lib/docker/containers
。
stream
只读给定的流,这可以是:all
,stdout
或stderr
。默认是all
。
指定多个探矿者
当您需要从多个文件中收集行时,可以简单地配置一个探测器,并指定多个路径来为每个文件启动一个收集器。但是,如果你想申请额外的特定探矿- 配置设置(如fields
,include_lines
,exclude_lines
,multiline
,等),以从特定文件中获取的线,你需要在Filebeat配置文件中定义多个探矿。
在配置文件中,您可以指定多个探矿者,并且每个探矿者可以定义多个要爬网的路径,如以下示例所示。
确保一个文件在所有的探矿者中都没有定义多次,因为这会导致意外的行为。
filebeat.prospectors: - type: log paths: - /var/log/system.log - /var/log/wifi.log - type: log paths: - "/var/log/apache2/*" fields: apache: true fields_under_root: true
示例中的配置文件启动两个探矿者(探矿者列表是一个YAML 数组,所以每个探矿者以a开头-
)。第一个探矿者有两个收割机,一个收割system.log
锉,另一个收割wifi.log
。第二个探矿者为目录中的每个文件启动一个收割机,apache2
并使用fields
配置选项来添加一个调用apache
到输出的字段。
管理多行消息
Filebeat收集的文件可能包含跨越多行文本的消息。例如,多行消息在包含Java堆栈跟踪的文件中很常见。为了正确处理这些多行事件,您需要配置文件中的multiline
设置filebeat.yml
以指定哪些行是单个事件的一部分。
如果要将多行事件发送到Logstash,请在将事件数据发送到Logstash之前,使用此处介绍的选项来处理多行事件。尝试在Logstash中实现多线事件处理(例如,通过使用Logstash多线编解码器)可能会导致混合流和损坏的数据。
同时阅读YAML提示和疑难解答以及正则表达式支持以避免常见的错误。
配置选项编辑
您可以filebeat.prospectors
在filebeat.yml
配置文件部分指定以下选项来控制Filebeat如何处理跨越多行的消息。
以下示例显示了如何配置Filebeat以处理消息的第一行以括号([
)开头的多行消息。
multiline.pattern: '^\[' multiline.negate: true multiline.match: after
Filebeat采取所有不开始的行,[
并将它们与前一行相结合。例如,您可以使用此配置将多行消息的以下行添加到单个事件中:
[beat-logstash-some-name-832-2015.11.28] IndexNotFoundException[no such index] at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:566) at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:133) at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:77) at org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction.checkBlock(TransportDeleteIndexAction.java:75)
multiline.pattern
指定要匹配的正则表达式模式。请注意,Filebeat支持的正则表达式模式与Logstash支持的模式略有不同。请参阅正则表达式支持以获取支持的正则表达式模式列表。根据您如何配置其他多行选项,匹配指定正则表达式的行将被视为前一行的延续或新多行事件的开始。您可以将negate
选项设置为否定模式。
multiline.negate
定义模式是否被否定。默认是false
。
multiline.match
指定Filebeat如何将匹配行组合到事件中。设置是after
或before
。这些设置的行为取决于您指定的内容negate
:
设置 negate | 设置 match | 结果 | 例 pattern: ^b |
---|---|---|---|
|
| 匹配模式的连续行将附加到不匹配的上一行。 | |
|
| 与该模式匹配的连续行被预先添加到不匹配的下一行。 | |
|
| 不匹配模式的连续行会附加到上一行匹配的行。 | |
|
| 与模式不匹配的连续行被添加到匹配的下一行。 | |
该after
设置等同previous
于Logstash,before
相当于next
。
multiline.flush_pattern
指定一个正则表达式,其中当前多行将从内存中清除,结束多行消息。
multiline.max_lines
可以组合成一个事件的最大行数。如果多行消息包含多max_lines
行,则丢弃任何附加行。默认值是500。
multiline.timeout
在指定的超时之后,即使没有找到新模式来启动新事件,Filebeat也会发送多行事件。默认值是5s。
多行配置
示例
本节中的示例涵盖以下用例:
- 将Java堆栈跟踪组合成一个事件
- 将C风格的线条连续组合成一个单独的事件
- 结合时间戳事件的多行
Java堆栈跟踪
Java堆栈跟踪由多行组成,每行以最后一行开头,如下例所示:
Exception in thread "main" java.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) at com.example.myproject.Author.getBookTitles(Author.java:25) at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^[[:space:]]' multiline.negate: false multiline.match: after
此配置将以空格开头的所有行合并到上一行。
下面是一个Java堆栈跟踪,它提供了一个稍微复杂一些的例子:
Exception in thread "main" java.lang.IllegalStateException: A book has a null property at com.example.myproject.Author.getBookIds(Author.java:38) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) Caused by: java.lang.NullPointerException at com.example.myproject.Book.getId(Book.java:22) at com.example.myproject.Author.getBookIds(Author.java:35) ... 1 more
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' multiline.negate: false multiline.match: after
在这个例子中,模式匹配以下几行:
- 一个以空格开始的行,后跟单词
at
or...
- 以词开始的一行
Caused by:
线路延续
几种编程语言\
在行尾使用反斜杠()字符表示该行继续,如下例所示:
printf ("%10.10ld \t %10.10ld \t %s\ %f", w, x, y, z );
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '\\$' multiline.negate: false multiline.match: before
此配置将以\
字符结尾的任何行与后面的行合并。
时间戳
来自Elasticsearch等服务的活动日志通常以时间戳开始,然后是关于特定活动的信息,如下例所示:
[2015-08-24 11:49:14,389][INFO ][env ] [Letha] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after
此配置使用negate: true
和match: after
设置来指定任何不符合指定模式的行都属于上一行。
应用程序事件编辑
有时您的应用程序日志包含以自定义标记开始和结束的事件,如以下示例:
[2015-08-24 11:49:14,389] Start new event [2015-08-24 11:49:14,395] Content of processing something [2015-08-24 11:49:14,399] End event
要在Filebeat中将其作为单个事件进行整合,请使用以下多行配置:
multiline.pattern: 'Start new event' multiline.negate: true multiline.match: after multiline.flush_pattern: 'End event'
该flush_pattern
选项指定了当前多行将被刷新的正则表达式。如果您想到pattern
指定事件开始的flush_pattern
选项,则该选项将指定事件的结束或最后一行。
测试你的regexp模式进行多行
为了让您更容易在多行配置中测试正则表达式模式,我们创建了一个 Go Playground。您可以简单地插入正则表达式模式以及multiline.negate
您打算使用的设置,并在内容反引号(``)之间粘贴示例消息。然后单击运行,您将看到消息中哪些行与您指定的配置相匹配。例如:
指定一般设置
您可以在filebeat.yml
配置文件中指定设置来控制Filebeat的一般行为。这包括:
全局Filebeat配置选项
这些选项位于filebeat
命名空间中。
registry_file
注册表文件的名称。如果使用相对路径,则认为是相对于数据路径。有关详细信息,请参阅目录布局部分 默认是${path.data}/registry
。
filebeat.registry_file:注册表
无法使用符号链接作为注册表文件。
注册表文件只在刷新新事件时更新,而不是在预定义时间段内更新。这意味着如果有一些TTL过期的状态,只有在处理新事件时才会被删除。
config_dir
包含其他探测器配置文件的目录的完整路径。每个配置文件必须以.yml
。即使只处理文件的探测器部分,每个配置文件也必须指定完整的Filebeat配置层次结构。所有的全局选项,如registry_file
忽略。
这个config_dir
选项必须指向一个目录,而不是主Filebeat配置文件所在的目录。
如果指定的路径不是绝对的,则认为是相对于配置路径。有关详细信息,请参阅 目录布局部分
filebeat.config_dir:path / to / configs
shutdown_timeout
在Filebeat关闭之前,Filebeat等待关闭以等待发布者完成发送事件的时间。
默认情况下,此选项被禁用,Filebeat不会等待发布者在关闭之前完成发送事件。这意味着在重新启动Filebeat时,发送到输出的任何事件,在Filebeat关闭之前未被确认。有关如何工作的更多详细信息,请参阅Filebeat如何确保至少一次交付?编辑。
您可以配置该shutdown_timeout
选项以指定Filebeat在关闭之前等待发布者完成发送事件的最长时间。如果所有事件都被确认之前shutdown_timeout
,Filebeat将关闭。
此选项没有建议的设置,因为确定正确的值shutdown_timeout
取决于Filebeat正在运行的环境和输出的当前状态。
配置示例:
filebeat.shutdown_timeout:5s
常规配置选项
所有Elastic Beats都支持这些选项。因为它们是常用选项,所以它们不是命名空间。
这是一个示例配置:
name: "my-shipper" tags: ["service-X", "web-tier"]
name
编辑
Beat的名字。如果此选项为空,hostname
则使用服务器。该名称被包括beat.name
在每个已发布的交易中的字段中。您可以使用该名称对由单个节拍发送的所有交易进行分组。
例:
name: "my-shipper"
tags
Beat包含在tags
每个已发布事务的字段中的标签列表。通过标签可以很容易地将服务器按不同的逻辑属性分组 例如,如果您有一组Web服务器,则可以将“webservers”标记添加到每个服务器上的Beat,然后在Kibana Web界面中使用筛选器和查询来获取整个服务器组的可视化。
例:
tags: ["my-service", "hardware", "test"]
fields
您可以指定的可选字段将其他信息添加到输出。字段可以是标量值,数组,字典或这些的任何嵌套组合。默认情况下,您在此处指定的字段将被分组在fields
输出文档的子字典下。要将自定义字段存储为顶级字段,请将该fields_under_root
选项设置为true。
例:
fields: {project: "myproject", instance-id: "574734885120952459"}
fields_under_root
如果此选项设置为true,则自定义字段将作为顶级字段存储在输出文档中,而不是在fields
子字典下进行分组。如果自定义字段名称与其他字段名称冲突,则自定义字段将覆盖其他字段。
例:
fields_under_root: true fields: instance_id: i-10a64379 region: us-east-1
processors
要应用于节拍生成的数据的处理器列表。
有关在配置中指定处理器的信息,请参阅筛选并增强导出的数据。
max_procs
设置可以同时执行的最大CPU数量。缺省值是系统中可用的逻辑CPU数量。
加载外部配置文件
Filebeat可以为探矿者和模块加载外部配置文件,这允许你将你的配置分成多个较小的配置文件。有关详细信息,请参阅Prospector配置编辑和 模块配置编辑部分。
在具有POSIX文件权限的系统上,所有Beats配置文件都受到所有权和文件权限检查。有关更多信息,请参阅 Beats平台参考中的配置文件所有权和权限。
探矿者配置
对于探矿者配置,请在文件path
的filebeat.config.prospectors
部分中指定选项 filebeat.yml
。例如:
filebeat.config.prospectors: enabled: true path: configs/*.yml
path
Glob 发现的每个文件必须包含一个或多个探矿者定义的列表。
每个外部配置文件的第一行必须是一个以开始的探矿者定义- type
。确保你省略了filebeat.config.prospectors
这个文件中的一行 。
例如:
- type: log paths: - /var/log/mysql.log scan_frequency: 10s - type: log paths: - /var/log/apache.log scan_frequency: 5s
两个正在运行的探矿者没有定义重叠的文件路径是至关重要的。如果多个探矿者同时收获同一个文件,可能会导致意想不到的行为。
模块配置编辑
对于模块配置,您path
可以在文件filebeat.config.modules
部分指定选项 filebeat.yml
。默认情况下,Filebeat加载modules.d
目录中启用的模块配置 。例如:
filebeat.config.modules: enabled: true path: ${path.config}/modules.d/*.yml
如果要使用该命令启用和禁用模块配置,则该path
设置必须指向该modules.d
目录modules
。
Glob找到的每个文件都必须包含一个或多个模块定义的列表。
每个外部配置文件的第一行必须是一个以开头的模块定义- module
。确保你省略了filebeat.config.modules
这个文件中的一行 。
例如:
- module: apache2 access: enabled: true var.paths: [/var/log/apache2/access.log*] error: enabled: true var.paths: [/var/log/apache2/error.log*]