背景
在某些场景下,我们需要采集的日志会分散在多个目录,为了在一个采集配置中同时采集它们,我们往往需要把采集配置中的目录指定为这些目录的共同父目录,这在实际使用用可能会产生一些问题。以如下的目录结构为例,我们希望在一个采集配置内指定采集 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 条。