Filebeat原理
官方说明:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html
Filebeat
有两大部分,inputs
和 harvesters
,inputs
负责找文件(类似 find
命令)和管理 harvesters
,一个 harvester
则和一个文件一一对应,一行行读然后发送给 output
(类似tail -f
)。
Log input配置详解
官方说明:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html
基本例子
filebeat.inputs:
- type: log
paths:
- /var/log/system.log
- /var/log/wifi.log
- type: log
paths:
- "/var/log/apache2/*"
fields:
apache: true
fields_under_root: true
inputs 可以配置多块(block)
paths 可以配置多个文件,文件路径和文件名都支持通配。
ignore_older 和 scan_frequency
场景问题
场景1:路径下的历史文件可能很多,比如配置了按天分割,显然旧文件我们一般是不需要的。
场景2:扫描频率如何控制,通配设置复杂的话频繁扫文件也是很大的开销。
解决方案
场景1是通过 ignore_older
参数解决,意思是多久前的旧文件不扫描。
比如设置为 1h,表示文件时间在 1h 之前的日志都不会被 input 模块搜集,直到有新日志产生。
场景2是通过 scan_frequency
参数控制,表示多久扫描一次是否有新文件产生。
比如设置 10s(默认),一个新文件产生 10s 后会被发现,或者一个旧文件(上面 ignore_older
)新产生了一行日志 10s 才发现这个文件。
close_* 和 clean_*
被 harvester
获取的文件就一直拿着不放吗?文件重命名或者被删除后怎么办呢?
close_* 配置簇
The close_*
configuration options are used to close the harvester after a certain criteria or time. Closing the harvester means closing the file handler.
close_inactive
多久关闭文件,比如一个日志文件,10 分钟都没有读到新的内容就把文件句柄关闭。
这里的时间不是取决于文件的最后更新时间,而是 Filebeat
内部记录的时间,上次读到文件和这次尝试读文件的时间差。
官方建议设置的时间是比文件产生数据频率高一个数量级(默认5m),比如每秒都有日志产生,这个值就可以设置为 1m。
close_renamed
是否关闭 rename
的文件。
close_removed
默认开启。
文件被删除后,就关闭文件句柄。
这个符合正常场景,一般日志清理程序都是清理很多天前的日志,这个时间远远大于 ignore_older
和 close_inactive
。
clean_* 配置簇
The clean_*
options are used to clean up the state entries in the registry file.
Filebeat 内部记录了很多文件状态,保存在 data/registry/filebeat/data.json。如果不清理的话这个文件会越来越大,影响效率。
{
"source": "/xxx/logs/logFile.2021-09-20.log",
"offset": 661620031,
"timestamp": "2021-09-21T00:04:23.050179808+08:00",
"ttl": 10800000000000,
"type": "log",
"meta": null,
"FileStateOS": {
"inode": 184559118,
"device": 2056
}
}
clean_inactive
多久清理一次注册信息。默认值是0(不开启clean_*相关功能)
清理的文件信息需要保证这个文件已经不活跃了,所以这个值需要大于 ignore_older
+ scan_frequency
。
不然的话清理后这个文件又被发现,则会重头开始读取,这样就重了。
clean_removed
文件被删除后是否清理注册信息,默认开启。
需要和 close_removed
值保持一致
简单总结几个时间配置:
clean_inactive > ignore_older + scan_frequency > close_inactive
推荐配置:
tail_files: false
scan_frequency: 10s
ignore_older: 60m
close_inactive: 10m
close_renamed: true
close_removed: true
clean_inactive: 70m
clean_removed: true
资源限制
在日志非常多机器负载高的时候加重机器负担,建议生产环境上需要对 Filebeat 资源进行限制:
max_procs
最多使用多少核,默认会全部使用,按机器情况限制为1-4核,不太会影响推送效率。
配置自动加载
官方说明:https://www.elastic.co/guide/en/beats/filebeat/current/_live_reloading.html
filebeat.config.inputs:
enabled: true
path: configs/*.yml
reload.enabled: true
reload.period: 10s
具体的 input 配置文件放在 configs 文件夹下,例如:
- type: log
paths:
- /var/log/messages
- /var/log/*.log
网友评论