背景
在某些场景下,我们需要采集的日志会分散在多个目录,为了在一个采集配置中同时采集它们,我们往往需要把采集配置中的目录指定为这些目录的共同父目录,这在实际使用用可能会产生一些问题。以如下的目录结构为例,我们希望在一个采集配置内指定采集 dira/b/c 目录下的 *.log,就必须将采集目录指定为父目录 admin。但这样指定后,由于 logtail 递归采集子目录的规则,一方面 dirs 目录下的 private.log 由于符合规则,也会被采集上来,会违背数据安全;另一方面,如果目录 dire、dirf 这些不需要的目录也会被监控,带来性能问题。
admin
├── dire
├── dira
│ └── a.log
├── dirb
│ └── b.log
├── dirc
│ └── c.log
├── dirf
└── dirs
└── private.log
在当前情况下,为了避免这种问题,我们一般会通过创建多个采集配置来分别指定具体的子目录,非常麻烦。为了支撑此类场景,logtail 新增了指定采集路径黑名单的功能,可以在采集配置所指定的根目录基础上,对指定的目录、文件进行过滤,使 logtail 跳过对它们的采集。
依赖 logtail 版本:0.16.26 及以上。
功能说明及示例
目前,黑名单功能支持按照 目录路径 和 文件路径 两种方式进行过滤,前者会跳过指定目录下所有内容(文件、子目录)的采集,后者则是跳过对指定文件的采集。为了提高使用的灵活性,在指定目录、文件的路径时,可以使用 *、? 等通配符来匹配多个目标。
假设我们采集的内容是目录 /home/admin 下的 *.log,以下是一些黑名单示例以及它们的效果。
- 按目录路径忽略
/home/admin/dir1:忽略子目录 dir1 下的所有内容。 - 按目录路径忽略
/home/admin/dir*:忽略/home/admin/下所有 dir 开头的子目录内容。 - 按目录路径忽略
/home/admin/*/dir:忽略/home/admin/下所有二级目录名为 dir 的子目录内容,比如/home/admin/a/dir会被忽略,而/home/admin/a/b/dir会被采集。 - 按文件路径忽略
/home/admin/private*.log:忽略/home/admin/目录下所有private开头、.log结尾的文件。 - 按文件路径忽略
/home/admin/private*/*_inner.log:忽略/home/admin/目录下private开头的一级子目录内,以_inner.log结尾的文件,比如/home/admin/private/app_inner.log会被忽略,而/home/admin/private/app.log会被采集。
控制台操作
通过【文本日志】的接入方式(比如 JSON、分隔符、单行等),根据向导进入配置页面后。启用【设置采集黑名单】,在黑名单配置中根据需要新增条目即可使用此功能。匹配黑名单过程会有计算开销,因此,建议黑名单条目数不要超过 10 条。
