本文介绍日志文件或容器的标准输出如何同时匹配多个采集规则,被采集多份。
默认情况下,日志文件或容器的标准输出只能同时匹配一个采集规则并被采集。当多个采集规则同时匹配同一日志文件或同一容器的标准输出时,只有最新创建的采集规则生效,其余采集规则对该日志文件或容器标准输出无效。
例如同时使用采集规则 1 和采集规则 2 采集如下文件:
/var/logs/a.log
和 /var/logs/b.log
。/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 版本开始,支持为文件添加如下额外的文件标识。
说明
目前支持通过 LogCollector 配置文件来设置额外的文件标识。
说明
在已存在的采集规则中设置了额外的文件标识配置,或者在已运行的 LogCollector 的配置文件中设置了额外的文件标识配置,都会导致 LogCollector 重复采集。因此在这种场景下,建议在采集规则中开启增量采集。
在 LogCollector 所在服务器的 filebeat-7.12.0/etc
目录中找到 LogCollector 配置文件 filebeat.yml
,然后在 filebeat.yml
文件中添加如下配置,设置额外标识。
checkpointer: state_multi_collects_type: "设置为 RuleID 或者 TopicIDRuleName"