Filebeat 7.17.0嵌套动态目录日志采集失败及传输延迟咨询
Filebeat 7.17.0 动态日志采集与延迟问题解决方案
问题1:嵌套动态目录通配符采集失效修复
根因
Filebeat 7.17.x 版本中,单星号*仅支持匹配单级路径下、进程启动时已存在的文件/目录,无法自动感知进程启动后新创建的多级嵌套目录;手动写三级单星号的配置,只要任意一级子目录(比如到点新生成的小时目录)在Filebeat启动时不存在,对应路径的采集规则就不会匹配到后续生成的文件,最终出现harvester数量为0的情况。
正确配置
使用支持递归匹配的双星号**适配动态生成的多层目录,显式开启递归glob参数,配置示例:
filebeat.inputs: - type: log enabled: true paths: # 递归匹配/var/log下所有子目录中的txt格式日志,适配任意层级的动态目录生成 - /var/log/**/*.txt # 如果需要限定仅采集2022年及之后的日志,缩小扫描范围降低性能消耗,可替换为下面的路径 # - /var/log/2022/**/*.txt recursive_glob.enabled: true
配置校验与排查
- 配置修改完成后先执行语法校验:
filebeat test config -c /etc/filebeat/filebeat.yml,返回Config OK再重启服务:systemctl restart filebeat - 若仍无文件被采集,检查权限:运行Filebeat的用户(默认为
filebeat系统用户)需要拥有所有层级日志目录的进入权限(目录的可执行权限)、日志文件的读权限 - 可通过Filebeat自带的监控接口验证harvester运行状态:
curl http://localhost:5066/stats | grep -A2 harvester,返回的running数量大于0即代表采集正常。
问题2:日志传输5-15分钟延迟优化
根因
默认配置下Filebeat、Logstash的攒批、扫描参数偏保守,为了降低资源占用设置了较长的攒批等待、目录扫描间隔,最终导致端到端延迟过高。
优化配置
1. Filebeat侧配置调整
在原有输入、输出配置基础上添加/修改以下参数:
filebeat.inputs: - type: log # 省略上述已配置的路径、递归参数 scan_frequency: 1s # 目录扫描间隔,默认10s,调为1s可快速发现新生成的日志文件 backoff: 1s # 检测到文件无新写入时的等待重试间隔,默认10s max_backoff: 10s # 无新写入时的最大等待间隔 backoff_factor: 2 # 退避系数 close_inactive: 5m # 文件5分钟无新写入才关闭harvester,避免频繁开关句柄 close_renamed: false close_removed: false output.logstash: hosts: ["<你的Logstash服务IP>:5044"] bulk_max_size: 512 # 单次批量发送的日志条数,默认2048,适当调小降低攒批等待时间 idle_timeout: 1s # 攒批最长等待时间,到时间即使没凑够bulk_max_size也立即发送 compression_level: 3 # 压缩等级平衡带宽消耗与CPU占用 worker: 2 # 发送到Logstash的并发worker数,根据CPU核心数调整
2. Logstash侧配套优化(Logstash未做过配置调整必须同步修改)
修改Logstash主配置文件logstash.yml中的pipeline参数:
pipeline.batch.size: 1500 pipeline.batch.delay: 50 # 单位毫秒,Logstash攒批最多等待50ms就立即处理,避免攒批等待过久
补充说明:Elasticsearch默认的索引刷新间隔
index.refresh_interval为1s,不需要额外修改;如果之前被人为调整为30s及以上,会导致日志写入Elasticsearch后无法被立即查询到,改回1s即可。
调整完所有配置后依次重启Filebeat、Logstash服务,端到端延迟可稳定在1-3s,满足实时同步需求。
内容的提问来源于stack exchange,提问作者Gourav
相关产品推荐
相关产品推荐

