ELK--filebeat详解
Filebeat提供了几种不同的方式来启用模块:
- 在
modules.d
编辑目录中启用模块配置 - 运行Filebeat 编辑时启用模块
- 在
filebeat.yml
文件编辑中启用模块配置
例如,要在 目录中启用apache2
和mysql
配置modules.d
,请使用:
./filebeat modules enable apache2 mysql
然后,当您运行Filebeat时,会加载modules.d
目录中指定的相应模块配置
要查看启用和禁用模块的列表,请运行:
./filebeat modules list
要在命令行运行Filebeat时启用特定的模块,可以使用该--modules
标志。
./filebeat -e --modules nginx,mysql,system
要启用filebeat.yml
配置文件中的特定模块,可以将条目添加到filebeat.modules
列表中。
filebeat.modules: - module:nginx - module:mysql - module:system
配置文件中的变量:
每个模块和文件集都有变量,您可以设置这些变量来更改模块的默认行为,包括模块查找日志文件的路径。
- module: nginx
access:
var.paths: ["/var/log/nginx/access.log*"] #示例中的设置将设置nginx
访问日志文件的路径
./filebeat -M“nginx.access.var.paths = [/ var / log / nginx / access.log *]”
#在命令行设置变量时,变量名称需要包含模块和文件集名称。您可以指定多个覆盖。每个覆盖必须以-M
./filebeat --modules nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" -M "nginx.error.var.paths=[/var/log/nginx/error.log*]"#完整例子
测试配置文件是否有效:
./filebeat -e -c filebeat.yml -configtest -d "publish" #可以测试您的配置文件以验证结构是否有效
如果您需要在YAML文件中指定正则表达式,最好将正则表达式包装在单引号中
如果09
在数值字段中使用前导零(例如,)而不用单引号包装值,那么YAML解析器可能会错误地解释该值。
如果该值是有效的八进制数,则将其转换为整数。如果不是,则转换为浮点数。
Filebeat使用探勘器来定位和处理文件
可以filebeat.prospectors
在filebeat.yml
配置文件的部分 指定一个探测器列表。
filebeat.prospectors: - type: log paths: - /var/log/apache/httpd-*.log - type: log paths: - /var/log/messages - /var/log/*.log
选项配置:
- log:读取日志文件的每一行(默认)。
- stdin:读入标准
- redis:从redis中读取慢日志条目(实验性)。
- udp:通过UDP读取事件。
max_message_size
- docker:从Docker中读取日志。
containers
path 应该被抓取和抓取的基于全局路径的列表可以使用以下模式:/var/log/*/*.log recursive_glob.enabled 启用扩展**到递归全局模式。启用此功能后,**每个路径中的最右边将扩展为固定数量的全局模式。例如:/foo/**扩展到/foo,/foo/*,/foo/*/*。此功能默认启用,设置recursive_glob.enabled为false将其禁用 encoding 以下是W3C推荐的一些示例编码: utf-16be,utf-16be,big5,gb18030,gbk,hz-gb-2312,euc-kr,euc-jp,iso-2022-jp,shift-jis等等 exclude_lines 正则表达式的列表,以匹配您希望Filebeat排除的行。Filebeat删除与列表中正则表达式匹配的所有行。 filebeat.prospectors: - paths: - /var/log/myapp/*.log exclude_lines: ['^DBG'] include_lines 正则表达式的列表,以匹配您希望Filebeat包含的行。Filebeat仅导出与列表中正则表达式匹配的行。 filebeat.prospectors: - paths: - /var/log/myapp/*.log include_lines: ['^ERR', '^WARN'] exclude_files 正则表达式的列表,以匹配您希望Filebeat忽略的文件。 exclude_files:['\ .gz $'] tags Beat包含在tags每个发布事件的字段中的标签列表。标签可以很容易地在Kibana中选择特定的事件,或者在Logstash中应用条件过滤。这些标签将被追加到一般配置中指定的标签列表中。 filebeat.prospectors: - paths: ["/var/log/app/*.json"] tags: ["json"] fields 您可以指定的可选字段将其他信息添加到输出。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值,数组,字典或这些的任何嵌套组合。 filebeat.prospectors: - paths: ["/var/log/app/*.log"] fields: app_id: query_engine_12 fields_under_root 如果此选项设置为true,则自定义字段将作为顶级字段存储在输出文档中,而不是在fields子字典下进行分组 。如果自定义字段名称与由Filebeat添加的其他字段名称冲突,则自定义字段会覆盖其他字段。 processors 要应用于探矿者生成的数据的处理器列表。 ignore_older 如果启用此选项,Filebeat将忽略在指定时间范围之前修改的任何文件。 close_* 的close_*配置选项用于之后的某一标准或时间以关闭收割机。关闭收割机意味着关闭文件处理程序。如果在收割机关闭后文件被更新,文件将在scan_frequency经过之后再被拾取。 close_inactive 启用此选项时,Filebeat将关闭文件句柄(如果文件尚未在指定的时间内收获)。例如,如果您的日志文件每隔几秒更新一次,则可以安全地设置close_inactive为1m。如果存在具有完全不同更新速率的日志文件,则可以使用具有不同值的多个探测器配置。 close_renamed 启用此选项时,文件重命名时Filebeat会关闭文件处理程序。例如,在旋转文件时发生这种情况。默认情况下,采集器保持打开状态并持续读取文件,因为文件处理程序不依赖于文件名。如果close_renamed启用该选项,并且文件被重命名或移动的方式不再与为探矿者指定的文件模式匹配,则文件将不会被再次拾取。Filebeat不会完成读取文件。 clean_removed 启用此选项后,Filebeat会在删除文件时关闭收割机。通常情况下,文件只能在指定的时间内无效后才能被删除close_inactive。但是,如果文件被提前删除,而您没有启用close_removed,Filebeat会保持打开文件以确保收割机已经完成。如果此设置导致文件因磁盘太早从磁盘中删除而未完全读取,请禁用此选项。 close_eof 启用此选项后,Filebeat会在文件结束时立即关闭文件。当您的文件只写入一次而不是不时更新时,这非常有用。例如,当您将每个日志事件写入新文件时,都会发生这种情况。该选项默认是禁用的。 close_timeout 该选项在输出被阻塞的情况下特别有用,这使得Filebeat即使对于从磁盘中删除的文件也保持打开的文件处理程序。设置close_timeout为5m确保文件定期关闭,以便操作系统释放它们。 clean_* 这些clean_*选项用于清理注册表文件中的状态条目。这些设置有助于减小注册表文件的大小,并可以防止潜在的inode重用问题。 clean_inactive 启用此选项后,Filebeat会在指定的非活动时间段过去后移除文件的状态。如果文件已被Filebeat忽略(文件比文件早ignore_older),则只能删除状态。该clean_inactive设置必须大于ignore_older + scan_frequency在收集文件时确保没有状态被删除。否则,该设置可能会导致Filebeat不断重新发送完整内容,因为它将clean_inactive删除探测器 仍然检测到的文件的状态。如果文件更新或再次出现,则从头开始读取文件。 clean_removed 启用此选项后,Filebeat将清除注册表中的文件(如果在最后一个已知名称下不能在磁盘上找到)。这意味着收割机完成后重命名的文件将被删除。该选项默认启用。 scan_frequency 探矿者在指定收获的路径中检查新文件的频率。例如,如果您指定一个glob /var/log/*,则使用指定的频率扫描目录中的文件 scan_frequency。指定1以尽可能频繁地扫描目录,而不会导致Filebeat过于频繁地扫描。我们不建议设置此值<1s。 harvester_buffer_sizeedit 每个采集器在获取文件时使用的缓冲区的大小(以字节为单位)。默认是16384 max_bytes 单个日志消息可以拥有的最大字节数。之后的所有字节max_bytes被丢弃并且不被发送。此设置对于可能变大的多行日志消息特别有用。默认值是10MB(10485760)。 json 这些选项使得Filebeat能够解码构造为JSON消息的日志。Filebeat逐行处理日志,所以JSON解码只在每行有一个JSON对象时才起作用。 json.keys_under_root:true json.add_error_key:true json.message_key:log 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。 pipeline 摄取节点管道标识,用于为探测器生成的事件设置。 symlinks 该symlinks选项允许Filebeat除了常规文件之外还收集符号链接。收集符号链接时,Filebeat会打开并读取原始文件,即使它报告符号链接的路径。 backoff 退避选项指定Filebeat如何积极地搜索打开的文件以进行更新。在大多数情况下,您可以使用默认值。 harvester_limit 该harvester_limit选项限制了一个探矿者并行启动的收割机的数量。这直接关系到打开的文件处理程序的最大数量。默认为harvester_limit0,这意味着没有限制。如果要采集的文件数超过操作系统的打开文件处理程序限制,则此配置很有用。 enabled 该enabled选项可与每个探矿者一起使用,以定义探矿者是否启用。默认情况下,enabled被设置为true。 msx_message_size 当使用type: udp,指定通过UDP接收的消息的最大大小。默认值是10240。
指定多个探矿器
当您需要从多个文件中收集行时,可以简单地配置一个探测器,并指定多个路径来为每个文件启动一个收集器。但是,如果你想申请额外的特定探矿(如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
config_dir
filebeat.config_dir: path/to/configs
包含其他探测器配置文件的目录的完整路径。每个配置文件必须以.yml
。即使只处理文件的探测器部分,每个配置文件也必须指定完整的Filebeat配置层次结构。
shutdown_timeout
filebeat.shutdown_timeout:5s
您可以配置该shutdown_timeout
选项以指定Filebeat在关闭之前等待发布者完成发送事件的最长时间。如果所有事件都被确认之前shutdown_timeout
,Filebeat将关闭。
普通配置:
name: "my-shipper" tags: ["service-X", "web-tier"]
name:Beat的名字。如果此选项为空,hostname
则使用服务器。该名称被包括beat.name
在每个已发布的交易中的字段中。您可以使用该名称对由单个节拍发送的所有交易进行分组。
tags:Beat包含在tags
每个已发布事务的字段中的标签列表。通过标签可以很容易地将服务器按不同的逻辑属性分组 例如,如果您有一组Web服务器,
则可以将“webservers”标记添加到每个服务器上的Beat,然后在Kibana Web界面中使用过滤器和查询来获取整个服务器组的可视化。
tags: ["my-service", "hardware", "test"]
fields
fields: {project: "myproject", instance-id: "574734885120952459"} 您可以指定的可选字段将其他信息添加到输出。字段可以是标量值,数组,字典或这些的任何嵌套组合。默认情况下,您在此处指定的字段将被分组在fields输出文档的子字典下。
要将自定义字段存储为顶级字段,请将该fields_under_root选项设置为true。
fields_under_root
如果此选项设置为true,则自定义字段将作为顶级字段存储在输出文档中,而不是在fields
子字典下进行分组。如果自定义字段名称与其他字段名称冲突,则自定义字段将覆盖其他字段。
fields_under_root: true fields: instance_id: i-10a64379 region: us-east-1
探矿者配置
对于探矿者配置,您path可以在文件的filebeat.config.prospectors部分指定选项 filebeat.yml。 filebeat.config.prospectors: enabled: true path: configs/*.yml - type: log paths: - /var/log/mysql.log scan_frequency: 10s - type: log paths: - /var/log/apache.log scan_frequency: 5s
两个正在运行的探矿者没有定义重叠的文件路径是至关重要的。如果多个探矿者同时收获同一个文件,可能会导致意想不到的行为。
模块配置
filebeat.config.modules: enabled: true path: ${path.config}/modules.d/*.yml
- module:apache2 access: enabled:true var.paths:[/var/log /apache2 / access.log*] error: enabled:true var.paths:[/var/log/apache2/error.log*]
对于模块配置,您path可以在文件filebeat.config.modules部分指定选项 filebeat.yml。默认情况下,Filebeat加载modules.d目录中启用的模块配置