Filebeat:即使使用 filebeat.registry.flush:60 秒,注册表 log.json 也会不断增长

问题描述 投票:0回答:1

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

任何帮助或澄清将不胜感激。

elastic-stack filebeat
1个回答
0
投票

这看起来像一个错误。使用

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

© www.soinside.com 2019 - 2024. All rights reserved.