在 Elastic 7.14 中,filestream inputlog input 的后继者)现在在 Filebeat 中普遍可用。 这种新的、卓越的输入为读取活动日志文件提供了更好的支持,在系统中存在背压时具有更快的反应时间、更快的注册表更新、与外部日志轮换工具的更好合作等等。

改进的注册表性能

以前,当注册表文件(用于保存发布事件进度的文件)包含许多条目时,状态更新会变慢,即使 Filebeat 只收集少数文件。主要问题是完整的注册表在来自输出的每个 ACK​​ 之后被序列化。这需要每次注册表写入都进行昂贵的 fsync 调用。现在,偏移量更新(offset updates)以仅追加加方式写入文件。当日志达到 10 MB 时,将注册表序列化,并减少 fsync 调用的次数。这使得注册表更新更有效。

此外,Filebeat 以前只能清理属于输入的状态。这是有问题的,因为自动发现(autodiscovery)会启动和停止新输入,从而打开新文件。这些文件的状态从未被删除。所以我们不得不分离注册表清理以从注册表中删除孤立状态。现在删除过时的条目不依赖于管道的其他部分。当一个条目被标记为无效时,无论背压或是否存在声明该文件的输入,它都会从注册表中删除。

Harvester 管理

检查需要关闭的打开文件现在与数据收集并行运行。 这样,即使系统中存在背压,输入也可以停止 havester。 此外,注册表元数据更新和条目删除不再依赖于输出的可用性,这意味着可以比以前更快地从注册表中删除过时的状态。

灵活的阅读器管道

除了改进之外,我们还添加了新功能。 现在,多行、JSON 和容器日志解析的顺序可在名为解析器的选项下进行配置。 此外,我们计划添加一个 syslog 解析器,以便你可以从以 syslog 格式编写的日志文件中提取信息。 通过使读取器管道更加灵活,我们能够在所有 Filebeat 输入中采用解析器。 我们已经将它们添加到 AWS S3 输入中,未来将支持更多输入。

更好地配合外部日志轮转工具

我们还改进了对外部日志轮换工具的支持。 前面描述的改进让 filestream input 在使用基于重命名的轮转策略时轮转事件的反应更快。 我们还为基于 copytruncate 的策略引入了一个特殊的 prospector。

以前,当使用 copytruncate 轮换输入文件时,Filebeat 无法跟踪日志。 在复制活动文件时进行轮换,Filebeat 将其作为新的日志文件处理并将内容发送到输出,这导致了重复事件。 当使用 rotation.external.strategy.copytruncate.* 选项配置时,输入现在可以正确处理旋转的文件并继续将它们转发到之前停止的地方。

我们正在计划对日志轮换进行更多增强,因为文件轮换是日志管理的重要组成部分。

其他改进

另一个值得一提的新特性是 include_files,它是 exclude_files 的对应物。 我们还为尾随文件添加了更精细的支持。 现在,你可以通过设置 ignore_inactive 选项来选择是否要从 Filebeat 的第一次启动、最后一次启动或最后一次配置更改开始拖尾文件。

我们相信这种新架构将使我们能够在未来进一步改进日志收集。 我们期待听到社区的反馈。

示例

filestrean input 的使用和之前的 log input 输入在使用方法上并没有什么不同。我们可以使用如下的一个简单的例子来进行展示:

filebeat.yml

filebeat.inputs:

- type: filestream
  paths:
    - /var/log/messages
    - /var/log/*.log

我们在 filebeat.yml 文件中添加如上所示的 filestream type。我们然后启动 Filebeat,那么如上所示的日志文件就会导入到 Elasticsearch 或者 Logstash 中。

参考

【1】https://www.elastic.co/blog/read-active-log-files-more-quickly-and-easily-with-the-new-filestream-input-in-filebeat

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐