You need to enable JavaScript to run this app.
导航
文件日志或标准输出同时被采集多份
最近更新时间:2024.11.18 14:26:35首次发布时间:2024.09.29 14:09:12

本文介绍日志文件或容器的标准输出如何同时匹配多个采集规则,被采集多份。

背景信息

默认情况下,日志文件或容器的标准输出只能同时匹配一个采集规则并被采集。当多个采集规则同时匹配同一日志文件或同一容器的标准输出时,只有最新创建的采集规则生效,其余采集规则对该日志文件或容器标准输出无效。
例如同时使用采集规则 1 和采集规则 2 采集如下文件:

  • 采集规则 1 的采集路径为 /var/logs/a.log/var/logs/b.log
  • 采集规则 2 的采集路径为 /var/logs/b.log/var/logs/c.log

采集规则 1 和采集规则 2 同时匹配日志文件 /var/logs/b.log。假设采集规则 1 是最新创建的,那么 LogCollector 将通过采集规则 1 采集 /var/logs/a.log/var/logs/b.log 文件中的日志,通过采集规则 2 仅采集 /var/logs/c.log 文件中的日志。
从 LogCollector v2.1.0 版本开始,LogCollector 支持设置额外的文件标识,允许日志文件或容器的标准输出能够同时被多个采集规则所匹配并采集。

文件标识

默认情况下,LogCollector 使用日志文件 ID(包括文件 inode、 device 和前 N 个字节的 checksum) 作为文件标识,从 LogCollector v2.1.0 版本开始,支持为文件添加如下额外的文件标识。

  • 采集规则 ID(RuleID):使用采集规则 ID 作为额外的文件标识。即 LogCollector 将使用采集规则 ID 和日志文件 ID 作为文件标识。
  • 日志主题 ID+采集规则名称(TopicIDRuleName):使用日志主题 ID 和采集规则名称作为额外的文件标识。即 LogCollector 将使用日志主题ID、采集规则名称和日志文件 ID 作为文件标识。

    说明

    • 使用采集规则 ID 时,如果采集规则被重建,即先删除旧采集规则,然后创建完全相同的新采集规则,那么由于采集规则 ID 发生了变化,新采集规则会重新采集所匹配的日志文件或容器标准输出。
    • 使用日志主题 ID+采集规则名称时,如果采集规则被重建,即先删除旧采集规则,然后创建完全相同的新采集规则,那么由于日志主题 ID 和采集规则名称都没有发生变化,新采集规则不会重新采集所匹配的日志文件或容器标准输出。

操作步骤

目前支持通过 LogCollector 配置文件来设置额外的文件标识。

说明

在已存在的采集规则中设置了额外的文件标识配置,或者在已运行的 LogCollector 的配置文件中设置了额外的文件标识配置,都会导致 LogCollector 重复采集。因此在这种场景下,建议在采集规则中开启增量采集。

LogCollector 配置文件

在 LogCollector 所在服务器的 filebeat-7.12.0/etc 目录中找到 LogCollector 配置文件 filebeat.yml,然后在 filebeat.yml 文件中添加如下配置,设置额外标识。

checkpointer:
  state_multi_collects_type: "设置为 RuleID 或者 TopicIDRuleName"