Filebeat 7.17.1
我正在考虑减少部署中 filebeat 注册表的 IO 量。经过一番研究后,我发现了 filebeat.registry.flush 设置,并认为它可以实现我想要的功能。我将其设置为60s重新部署并监视注册表目录。我没有看到我所期望的,因为我发现 log.json 至少每秒不断增长(如果不是更快的话)。我预计文件修改之间会有 60 秒的间隔。我猜我的理解是错误的?
我也尝试将设置更改为5s作为测试,看看是否是时间量的问题。没有区别...
这是我的文件beat.yml
filebeat.config.inputs:
enabled: true
path: /etc/filebeat/inputs.yml
reload.enabled: true
reload.period: 10s
filebeat.registry.path: /var/resin/logs/${REALM_CMID}/registry
filebeat.registry.flush: 5s
#================================ Outputs =====================================
output.logstash:
hosts: ["${FILEBEAT_LOGSTASH_HOST}:5044"]
ssl.certificate_authorities: ["/etc/ssl/certs/${RESIN_SSL_CERTIFICATE_NAME}"]
ssl.verification_mode: none
我知道我所做的更改正在被读取,因为我还更改了注册表路径并且确实生效了。
我们有大约 30 个文件正在受到监控。每个的输入配置几乎相同:
- type: filestream
id: pok-account
enabled: true
fields:
log_type: account
product: pok
kingdom: ${KINGDOM_CMID}
realm: ${REALM_CMID}
parsers:
- multiline:
type: pattern
pattern: '^\['
negate: true
match: after
paths:
- /var/resin/logs/*/pok/log/*account.log
任何帮助或澄清将不胜感激。
这看起来像一个错误。使用
filebeat.registry.flush
输入时,log
设置有效,但 filestream
无效。因此,如果您需要控制刷新间隔,我会坚持使用log input。这是我的测试方法。
filebeat.inputs:
- type: filestream # Or 'log'.
paths:
- ./test.log
filebeat.registry.flush: 10s
logging:
level: debug
selectors: [registrar]
http:
host: 127.0.0.1
port: 5066
output.console.enabled: true
Filebeat 公开了一个指标,该指标在注册表刷新时会增加。您可以通过以下方式查看:
curl --silent "http://127.0.0.1:5066/stats" | jq .registrar.writes.total
使用
log
输入时,指标按预期以 10 秒间隔递增。它还会为每次刷新记录一条消息。
使用
filestream
时,指标永远不会增加,并且没有日志消息,但如果我观察底层 data/registry/filebeat/log.json
文件,其修改时间会不断变化。因此,我认为 filestream
输入绕过了限制刷新的注册器代码,并直接写入基于文件的数据存储。我建议打开该产品的bug。