Logtail 新功能:采集路径黑名单

背景

在某些场景下,我们需要采集的日志会分散在多个目录,为了在一个采集配置中同时采集它们,我们往往需要把采集配置中的目录指定为这些目录的共同父目录,这在实际使用用可能会产生一些问题。以如下的目录结构为例,我们希望在一个采集配置内指定采集 dira/b/c 目录下的 *.log,就必须将采集目录指定为父目录 admin。但这样指定后,由于 logtail 递归采集子目录的规则,一方面 dirs 目录下的 private.log 由于符合规则,也会被采集上来,会违背数据安全;另一方面,如果目录 diredirf 这些不需要的目录也会被监控,带来性能问题。

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 条。

Logtail 新功能:采集路径黑名单

上一篇:Logtail 心跳监控最佳实践


下一篇:批量开启 SLS 服务日志