Filebeat-Loginput输入设置大全
目录
recursive_glob.enabled: false/true
exclude_lines: ['xxx'] 排除正则匹配到的行
include_lines: ['xxx'] 只取正则匹配到的行
harvester_buffer_size: n 收集器缓存大小,默认值为16384
max_bytes: n 单行可以具有的最大字节数。默认值为10MB(10485760)
multiline.xxx: ... 处理跨行日志# 重要,有需求时
exclude_files: ['xxx'] 忽略正则匹配的文件
ignore_older: 忽略该时间之前修改的旧数据。默认为0,表示禁用
scan_frequency: 设置扫描路径的频率,默认10s
scan.sort: 排序相关,属于实验版本,官方不建议设置
scan.order: 排序相关,属于实验版本,官方不建议设置
tail_files: 开启为只从末尾读取,并非开头,默认关闭 # 只获取新数据
harvester_limit: 限制一个输入并行启动的收集器数量
enabled: true/false 通用配置
field: # 重要 通用配置
fields_under_root: true/false # 重要 通用配置
processors: 预处理器 通用配置
pipeline: 通用配置
官方文档:
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html
关于本文:
-
Filebeat输入配置时,type有几种类型,我们常采用默认值:log。
-
实际上官方给出的input type有数种可以设置:Log,Stdin,Redis,UDP,Docker,TCP,Syslog
-
本文基于官方文档的排序,重点讲解的是Log类型输入设置,可参考开头给出的文档链接。
-
内容实际上是翻译文档+个人整理,并在部分选项之后标明'# 重要',说明较为实用。
配置详解:
-type: log
- Filebeat为在指定路径下找到的每个文件启动收集器。
- 您可以为每行指定一个路径,并添加相关设置。
- 以短划线( - )开头,区分不同收集器。
path: xxx # 输入路径 # 重要,最基本
示例:
filebeat.inputs:
- type: log # 例1
paths:
- /var/log/system.log
- /var/log/wifi.log
- type: log # 例2
paths:
- "/var/log/apache2/*"
fields:
apache: true
fields_under_root: true
- 例1 从多个文件中获取行:Stask.Log和WiFi.Log.
- 例2 从目录下每个文件获取行,并用'字段配置选项'在输出中添加一个名为apache的字段。
- 还可以这样设置:/var/log/*/*.log,二级子目录下的所有log文件
recursive_glob.enabled: false/true
- 允许扩展**为递归的glob模式。默认关闭为true。
- 设置false:以递归方式获取目录的所有子目录中的所有文件。
- 例如:/foo/**可递归扩展到/foo,/foo/*,/foo/*/*等。
encoding: xxx # 特殊编码情况
- 读取包含国际字符的数据的文件编码。
- W3C推荐的一些示例编码:
-
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等
- plain编码是特殊的,因为它不验证或转换任何输入
exclude_lines: ['xxx'] 排除正则匹配到的行
默认不排除
示例:
filebeat.inputs:
- type:log
...
exclude_lines:['^ DBG']
include_lines: ['xxx'] 只取正则匹配到的行
默认都获取
示例:
filebeat.inputs:
- type:log
...
include_lines:['^ ERR','^ WARN']
特殊需求:获取匹配A但排除匹配B的行,A/B为正则表达式
示例:
filebeat.inputs:
- type:log
...
include_lines:[A]
exclude_lines:[B]
harvester_buffer_size: n 收集器缓存大小,默认值为16384
- 每个收集器在获取文件时使用的缓冲区大小(以字节为单位)。
max_bytes: n 单行可以具有的最大字节数。默认值为10MB(10485760)
- 超出丢弃不发送。此设置对于可能变大的多行日志消息比较实用。
json.xxx: ...json格式相关设置
- 构造为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: 默认值为false。
-
默认情况下,解码的JSON位于输出文档中的“json”键下。
-
如果启用此设置,则会在输出文档中将键复制到顶层。
- overwrite_keys:
-
如果keys_under_root启用此设置,则解码的JSON对象中的值将覆盖Filebeat通常添加的字段(类型,源,偏移等),以防发生冲突。
- add_error_key:
-
启用此设置,则Filebeat会在JSON解组错误或message_key在配置中定义但无法使用时添加“error.message”和“error.type:json”键。
- message_key:
-
一个可选配置设置,指定要应用线路过滤和多行设置的JSON密钥。
-
如果指定,则密钥必须位于JSON对象的顶层,并且与密钥关联的值必须是字符串,否则将不会发生过滤或多行聚合。
-
ignore_decoding_error: 默认值为false。
-
可选配置设置,指定是否应记录JSON解码错误。如果设置为true,则不会记录错误。
multiline.xxx: ... 处理跨行日志# 重要,有需求时
- 控制Filebeat处理跨越多行的日志消息的选项。
官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html
exclude_files: ['xxx'] 忽略正则匹配的文件
- 匹配您希望Filebeat忽略的文件。默认情况下不会排除任何文件。
- 可以配合'recursive_glob.enabled: false'递归方式监控子目录使用
示例:
filebeat.inputs:
- type:log
...
exclude_files:['\ .gz $']
ignore_older: 忽略该时间之前修改的旧数据。默认为0,表示禁用
- 依赖于文件的修改时间。可用于忽略陈旧日志情况使用。
- 设置非零值,如2h (2小时)或者5m (5分钟),表示启用忽略。
- 应该大于close_inactive的值。
- 两种情况:
1.未经过处理的文件,即注册表中无状态的文件
2.经过处理,但未更新的文件超过设定值
- 对于情况1,初始偏移在文件末尾,情况2不会更改偏移
- 若有更新,则在设置的偏移位置继续读取
- 关于注册表状态,请参考后面clean_*相关说明
close_*: 关闭收集器相关设置
- close_inactive: 在无新数据一定时间后关闭收集器,默认为0不设置
- 不是基于文件时间,依赖收集器的自有时间
- 启用后收集器若关闭,如果再次更新,则会启动新的收集器
- close_renamed: 在文件重命名时关闭收集器,默认禁用
- 由于文件处理程序不依赖文件名,所以默认禁用
- 针对win'无法旋转文件'(can’t rotate the files)特殊情况应启用
- close_removed: 在文件删除时关闭收集器,默认启用
- 通常只有文件处于非活跃状态,才能被删除。
- 如果产生提前删除,数据没有完全读取的情况,
- 需要禁用,必须同时禁用clean_removed。
- close_eof: 在文件结束时关闭收集器,默认禁用
- eof-End Of File
- 针对'一个事件对应一个文件'的情况启用。
- close_timeout: 为收集器设置生命周期,默认为0不设置
- 针对陈旧日志较有用,如果再次更新,则会启动新的收集器
clean_*: 清除注册表文件中的状态条目相关设置
- clean_inactive:不活动时间n过后删除文件的状态,默认为0禁用
- 必须大于ignore_older + scan_frequency以确保当一个文件仍然被没有收获的状态被删除
- 否则,可能导致不断重新发送完整内容,因为clean_inactive删除了Filebeat仍检测到的文件的状态。
- 针对以减少注册表文件的大小,适用每天都在产生大量的新文件情况下。
- 重命名文件名也会更新状态,计数器再次从0开始
- clean_removed: 无法找到原始文件时则清除状态,默认启用
- 针对共享驱动器短时间消失并再出现时,无需从头读取,应禁用
- 应同时禁用close_removed
scan_frequency: 设置扫描路径的频率,默认10s
- 可以设置为1s,不应设置小于1s
- 想保持实时传输,不建议设置此选项,建议设置close_inactive为默认
scan.sort: 排序相关,属于实验版本,官方不建议设置
scan.order: 排序相关,属于实验版本,官方不建议设置
tail_files: 开启为只从末尾读取,并非开头,默认关闭 # 只获取新数据
- 适用于尚未filebeat处理,未保存状态的文件,
- 若状态存在,则会忽略此设置
symlinks: 开启链接关联,默认禁用
- 适用于文件存在软连接的情况,
backoff: 退避相关设置
- backoff: 在EOF后到再次检查文件中的等待时间,默认1s
- 每当文件更新,等待时间会从0开始,
- max_backoff: 最大backoff时间,默认10s
- 达到EOF后再次检查文件之前Filebeat等待的最长时间
- 在检查文件多次退避之后,max_backoff无论值为多少,都不会超过backoff_factor
- 设置要求:backoff <= max_backoff <= scan_frequency
- 若max_backoff需要更高,建议关闭文件处理程序,让Filebeat再次获取文件。
- backoff_factor: 指定等待时间增加的速度指数,默认2
- 退避因子越大,max_backoff达到的值越快。
- 允许最小为1,会禁用退避算法
harvester_limit: 限制一个输入并行启动的收集器数量
- 与打开的文件处理程序的最大数量直接相关。默认harvester_limit值为0,表示没有限制。
- 如果要获取的文件数超过操作系统的打开文件处理程序限制,则此配置很有用。
- 实际上并非所有文件都是并行打开的。建议与close_*结合使用,更频繁地关闭收集器来处理新文件。
- 可以从'长时间不关闭收集器'改为'频繁关闭并打开新的收集器'状态,达到最佳效果。
- 独立适用于每个输入。可以使用此选项给更高的收集器限制来间接提高某些输入的优先级。
其他通用配置:Log,Stdin,Redis,UDP,Docker,TCP,Syslog均支持
enabled: true/false 通用配置
启用/禁用输入。默认情况下为true。
tags: # 重要 通用配置
每条信息中添加一个内容自定的tags字段。使用标签可以在Logstash中应用if语句过滤。
例:
filebeat.inputs:
- type: log
...
tags: ["json"]
field: # 重要 通用配置
- 自定义字段与值,向输出添加额外信息。
- 例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值,数组,字典或这些的任何嵌套组合。
- 默认情况下,您在此处指定的字段将分组在fields输出文档中的子字典下。
- 若要存储为顶级字段,设置fields_under_root选项为true。
- 如果在常规配置中声明了重复字段,则其值将被此处声明的值覆盖。
示例:
filebeat.inputs:
- type:log
...
fields:
app_id:query_engine_12
fields_under_root: true/false # 重要 通用配置
- 设置为true,自定义字段将存储为输出文档中的顶级字段,而不是在fields子字典下分组。
- 如果自定义字段名称与Filebeat添加的其他字段名称冲突,则自定义字段将覆盖其他字段。
processors: 预处理器 通用配置
- 用于处理输入的数据,例如,内嵌值为已转化json格式的字符串。
- 在filebeat.inputs:...后,顶级缩进配置
官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html
pipeline: 通用配置
- 用于由该输入生成的事件设置的Ingest Node管道ID。