Filebeat 核心配置详解

2021-12-07  本文已影响0人  朱穆朗玛

Filebeat原理

官方说明:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html

Filebeat.png

Filebeat 有两大部分,inputsharvestersinputs 负责找文件(类似 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_olderclose_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
上一篇 下一篇

猜你喜欢

热点阅读