1. 引言
Filebeat的配置文件是使用YAML标记语言编写的,Filebeat的配置文件主要分为以下几个部分:
2. prospectors具体配置
prospectors直译是勘探者或者淘金者,在Filebeat中主要用于配置你要从哪个地方去获取日志信息。
filebeat.prospectors:
- input_type: log
paths:
- /var/log/apache/httpd-*.log
document_type: apache
- input_type: log
paths:
- /var/log/messages
- /var/log/*.log
prospectors中可能包含多个prospector,每个prospector以”-“开始,里面包含多个你将要爬去的日志文件的路径。
2.1 input_type
input_type是prospector的输入类型,在Filebeat中支持两类:
- log:读取日志文件的每一行(默认配置)
- stdin:从标准输入流读取数据
2.2 paths
paths是prospector指定的路径。可以为任何shell通配符指定的日志文件,比如:
/var/log/apache/httpd-*.log
就表示从/var/log/apache目录下的以httpd-开头,.log为后缀的日志文件。但是注意,prospector不会对指定的目录进行递归查找,如果apache目录下还有目录,满足httpd-*.log格式,是不会被prospector采集到的。
2.3 encoding
encoding是指编码,表示以何种编码读取日志信息。常见的编码有: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…
2.4 exclude_lines
用正则表达式去匹配你不想让prospector采集的行。
filebeat.prospectors:
- paths:
- /var/log/myapp/*.log
exclude_lines: ['^DBG']
2.5 include_lines
用正则表达式去匹配你想让prospector采集的行。
filebeat.prospectors:
- paths:
- /var/log/myapp/*.log
include_lines: ['^ERR', '^WARN']
注意:如果include_lines和exclude_lines都同时指定了,那么系统会先去匹配include_lines然后再匹配exclude_lines
2.6 exclude_files
匹配你想让prospector忽略的文件。比如下面的配置就是让prospector忽略gz文件。
exclude_files: ['\.gz$']
2.7 tags
对采集的数据打上标记,方便后续导入到ElasticSearch后搜索方便。下面是加了tags配置采集的信息,可以看到多了tags字段。
{
"@timestamp": "2017-09-17T03:05:16.803Z",
"beat": {
"hostname": "yangyue",
"name": "yangyue",
"version": "5.6.0"
},
"input_type": "log",
"message": "Sep 16 01:28:22 yangyue kernel: [2832439.982662] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A)",
"offset": 1356,
"source": "/var/log/kern.log",
"tags": [
"test"
],
"type": "log"
}
2.8 fields
你可以往采集的信息中加入更多自定义的字段。默认情况下会在输出信息的fields子目录下以指定的新增fields建立子目录例如fields.app_id。比如下面的配置中增加了一个app_id字段
filebeat.prospectors:
- paths: ["/var/log/app/*.log"]
fields:
app_id: query_engine_12
通过上面的配置,采集到的日志信息为:
{
"@timestamp": "2017-09-17T03:18:52.504Z",
"beat": {
"hostname": "yangyue",
"name": "yangyue",
"version": "5.6.0"
},
"fields": {
"app_id": "query_engine_12"
},
"input_type": "log",
"message": "2017-09-14 22:24:24 startup packages configure",
"offset": 87333,
"source": "/var/log/dpkg.log",
"type": "log"
}
2.9 fields_under_root
如果该选项设置为true则新增fields成为顶级目录而不是将其放在fields目录下。自定义的field会覆盖filebeat默认的field。
2.10 ignore_older
可以指定Filebeat忽略指定时间段以外修改的日志内容比如2h两个小时或者5m(5分钟)。这个配置项的应用场景可能是:你只想搜集从上周开始的日志。
2.11 close_inactive
如果一个文件在某个时间段内没有发生过更新则关闭监控的文件handle。默认1h, change只会在下一次scan才会被发现
2.12 close_renamed
当文件重命名后就会关闭监控文件的handle
2.13 close_removed
当文件移除后就会关闭监控文件的handle
2.14 close_eof
当读取到文件结束时候就会关闭监控文件的handle,这个配置项适合那种只被写一次的日志。
2.15 close_timeout
Filebeat给harvestor一个限定时间,超过限定时间不管日志有没有读取完,都关闭handle
2.16 clean_inactive
启用此选项时,Filebeat会在指定的非活动时间段过去之后移除文件的状态(./data/registry)。
2.17 clean_removed
启用此选项时,如果在磁盘上找不到文件,Filebeat将从注册表中清除文件。
2.18 scan_frequency
检查指定用于日志采集的路径中的新文件的频率。
2.19 harvester_buffer_size
每个harvester监控文件时使用的buffer的大小。
2.20 max_bytes
日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。默认是10MB
2.21 json
如果日志格式是json的,可以对json文件作解析。下面有四个选项:keys_under_root、overwrite_keys、add_error_key、message_key
2.22 multiline
在程序出现异常,日志中会出现调用栈格式的多行日志:
[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: '^\['
multiline.negate: true
multiline.match: after
上面的配置中,采集“[”开头的行,一直到下一个以“[”开头的行。具体来说,对于多行信息的日志采集,有下面几个配置:
- pattern:匹配正则表达式。
- negate:和match进行配合使用
- match:和negate进行配合使用
- max_lines:最大采集的行。默认为500
- timeout:给定时间,如果一个规则去匹配的多行还没处理完成,那么Filebeat都会停止采集。
对于给定的pattern,negate和match有下面四种方式的组合,可以采集不同格式的多行信息日志:
2.23 tail_files
如果设置为true, Filebeat从文件尾开始监控文件新增内容把新增的每一行文件作为一个事件依次发送而不是从文件开始处重新发送所有内容。此配置适用于如果第一次对某个目录进行采集时候,你不想采集以前的日志信息,你可以设置此选项为true,但是在第一次之后推荐设置为false。
2.24 pipeline
采集器节点的分布式id生成器
2.25 symlinks
允许采集器采集符号链接
2.26 backoff
Filebeat检测到某个文件到了EOF之后每次等待多久再去检测文件是否有更新,默认为1s。
2.27 max_backoff
Filebeat检测到某个文件到了EOF之后等待检测文件更新的最大时间,默认是10秒。
2.28 backoff_factor
定义到达max_backoff的速度,默认因子是2,到达max_backoff后变成每次等待max_backoff那么长的时间才backoff一次,直到文件有更新才会重置为backoff。
2.29 harvester_limit
harvester开启的个数限制。默认为0,则是没限制。如果要采集的文件数超过操作系统的打开文件处理程序限制,则此配置很有用。设置harvester数量的限制意味着可能并非所有文件并行打开。 因此,我们建议将此选项与close_ *选项结合使用,以确保harvester更频繁地停止,以便可以拾取新文件。harvester选择文件是随机的,因此频繁停止能够保证之前没有采集的文件能够有平等的机会被采集到。
2.30 enabled
设置该prospector是否启用。默认为true