数据过滤类插件

数据过滤类插件用于根据条件过滤日志,根据过滤结果选择是否采集该日志记录。

数据过滤插件概览

日志服务提供以下多种类型的数据过滤插件,请按需要进行选择。

插件名称

类型

功能说明

过滤处理

原生

通过设置“白名单”正则表达式,仅采集字段值完全匹配指定正则条件的日志。

过滤日志

拓展

支持两种过滤模式:

  • 正则过滤日志(按值):通过正则表达式匹配字段值,支持“采集条件” + “丢弃条件”组合控制。

  • 正则过滤日志(按键):通过正则表达式匹配字段名称(Key) ,根据“字段是否存在”进行过滤。

功能入口

当您需要使用Logtail插件处理日志时,您可以在创建或修改Logtail配置时,添加插件。具体操作,请参见处理插件概述

原生插件与拓展插件的区别

原生插件:C++实现,性能更强。

拓展插件:Go实现,生态丰富且灵活,当业务日志过于复杂,无法使用原生插件处理时,可以考虑使用拓展插件。

  • 拓展插件性能限制

    • 使用拓展插件进行日志处理时,LoongCollector会消耗更多的资源(以CPU为主),如有需求可以调整LoongCollector参数配置进行日志传输延时过长优化

    • 当原始数据量的生成速度超过5 MB/s时,不建议使用过于复杂的插件组合来处理日志,可以使用拓展插件进行简单处理,再通过数据加工完成进一步处理。

  • 日志采集限制

    • 拓展插件对文本日志的处理采用行模式,即文件级别的元数据(例如__tag__:__path____topic__等)会被存放到每一条日志中。

    • 添加拓展插件后会影响和Tag相关的功能:

      • 上下文查询和LiveTail功能不可用。如果要使用这些功能,需要额外添加aggregators配置。

      • __topic__字段会被重命名为__log_topic__。如果添加了aggregators配置,日志中将同时存在__topic__字段和__log_topic__字段。如果您不需要__log_topic__字段,可使用丢弃字段插件删除该字段。

      • __tag__:__path__等字段不再具备原生字段索引,需要创建字段索引

过滤处理插件(原生)

过滤处理插件支持根据日志字段值来进行日志过滤。

配置说明

参数名称

说明

白名单

只采集符合白名单条件的日志,您需要设置目标字段名称和用于过滤的正则表达式。此处的正则表达式仅支持全文匹配,不支持关键词部分匹配。如何配置正则表达式,请参见正则表达式入门教程

各个白名单之间为与关系。相关示例如下:

  • 过滤出符合条件的日志。

    • 设置字段名level字段值WARNING|ERROR,表示只采集level字段值为WARNINGERROR的日志。

    • 设置字段名content字段值.*05\/Jan\/2023.*,表示只采集content字段值包含05/Jan/2023的日志。

  • 过滤掉不符合条件的日志。

    • 设置字段名level字段值^(?!.*(INFO|DEBUG)).*,表示不采集level字段值中包含INFODEBUG的日志。

    • 设置字段名level字段值^(?!(INFO|DEBUG)$).*,表示不采集level字段值为INFODEBUG的日志。

    • 设置字段名url字段值.*^(?!.*(healthcheck)).*,表示不采集url字段值中包含healthcheck的日志。

过滤日志插件(拓展)

使用processor_filter_regex插件或processor_filter_key_regex插件过滤日志。此处介绍各个插件的参数说明和配置示例。

使用限制

  • 文本日志和容器标准输出只支持表单配置方式,其余输入源只支持JSON配置方式。

  • Go语言的正则表达式引擎基于RE2实现,相比PCRE引擎存在以下限制:

    • 命名分组语法差异

      Go使用(?P<name>...)语法,而非PCRE(?<name>...)语法。

    • 不支持的正则模式

      • 断言(?=...)(?!...)(?<=...)(?<!...)

      • 条件表达式(?(condition)true|false)

      • 递归匹配(?R)(?0)

      • 子程序引用(?&name)(?P>name)

      • 原子组(?>...)

    建议使用Regex101等调试正则时,避免使用以上不支持的正则模式,否则插件将无法处理。

processor_filter_regex(按值正则过滤)

通过正则表达式匹配日志字段的值,从而实现日志过滤。

表单配置方式

  • 参数说明

    配置处理器类型正则过滤日志(匹配日志字段的值),相关参数说明如下表所示。

    说明

    日志字段的值完全匹配采集日志中的正则表达式,且不匹配丢弃日志中的正则表达式时,日志才会被采集,否则直接丢弃。

    参数

    说明

    采集日志

    输入日志字段名和该字段值匹配的正则表达式。如果原始日志中的目标字段值符合对应的正则表达式,则采集该日志。

    支持添加多个键值对,键值对之间为与关系。

    丢弃日志

    输入日志字段和该字段值匹配的正则表达式。如果日志中任意一个字段的值符合对应的正则表达式,则丢弃该日志。

    支持添加多个键值对,键值对之间为或关系。

  • 配置示例

    只采集ip10开头、methodPOSTbrowser不为aliyun.*的日志,配置示例如下:

    • 原始日志

      • 日志1

        "ip" : "10.**.**.**"
        "method" : "POST"
        "browser" : "aliyun-sdk-java"
      • 日志2

        "ip" : "10.**.**.**"
        "method" : "POST"
        "browser" : "chrome"
      • 日志3

        "ip" : "192.168.*.*"
        "method" : "POST"
        "browser" : "ali-sls-ilogtail"
    • Logtail插件处理配置

      image

    • 处理结果

      日志

      是否采集

      原因

      日志1

      不采集

      browser字段的值匹配丢弃日志中的正则表达式。

      日志2

      采集

      符合条件。

      日志3

      不采集

      ip字段的值不匹配采集日志中的正则表达式。

JSON配置方式

  • 参数说明

    配置typeprocessor_filter_regexdetail说明如下表所示。

    说明

    日志字段的值完全匹配Include中的正则表达式,且不匹配Exclude中的正则表达式时,日志才会被采集,否则直接丢弃。

    参数

    类型

    是否必选

    说明

    Include

    JSON Object

    Key为日志字段,Value为该字段值匹配的正则表达式。键值对之间为与关系。如果日志字段的值符合对应的正则表达式,则采集该日志。

    Exclude

    JSON Object

    Key为日志字段,Value为该字段值匹配的正则表达式。键值对之间为或关系。如果日志中任意一个字段的值符合对应的正则表达式,则丢弃该日志。

  • 配置示例

    只采集ip10开头、methodPOSTbrowser不为aliyun.*的日志,配置示例如下:

    • 原始日志

      • 日志1

        "ip" : "10.**.**.**"
        "method" : "POST"
        "browser" : "aliyun-sdk-java"
      • 日志2

        "ip" : "10.**.**.**"
        "method" : "POST"
        "browser" : "chrome"
      • 日志3

        "ip" : "192.168.*.*"
        "method" : "POST"
        "browser" : "ali-sls-ilogtail"
    • Logtail插件处理配置

      {
         "type" : "processor_filter_regex",
          "detail" : {
               "Include" : {
                  "ip" : "10\..*",
                  "method" : "POST"
               },
               "Exclude" : {
                  "browser" : "aliyun.*"
               }
          }
      }
    • 处理结果

      日志

      是否采集

      原因

      日志1

      不采集

      browser字段的值匹配Exclude中的正则表达式。

      日志2

      采集

      符合条件。

      日志3

      不采集

      ip字段的值不匹配Include中的正则表达式。

processor_filter_key_regex(按键正则过滤)

通过正则表达式匹配日志字段名称,从而实现日志过滤。

表单配置方式

  • 参数说明

    配置处理器类型正则过滤日志(匹配日志字段名),相关参数说明如下表所示。

    说明

    存在日志字段名称完全匹配采集日志中的正则表达式,且不匹配丢弃日志中的正则表达式时,日志才会被采集,否则直接丢弃。

    参数

    说明

    采集日志

    设置为日志字段的正则表达式,字段之间为与关系。如果日志字段符合对应的正则表达式,则采集该日志。

    丢弃日志

    设置为日志字段的正则表达式,字段之间为或关系。如果日志中任意一个字段符合对应的正则表达式,则丢弃该日志。

  • 配置示例

    采集包含字段名是以request开头的日志,配置示例如下:

    • 原始日志

      • 日志1

        "request_time" : 20
        "request_length": 2314
        "request_method" : "POST"
        "browser" : "aliyun-sdk-java"
      • 日志2

        "request_time" : 70
        "request_method" : "GET"
        "ip" : "192.168.**.**"
      • 日志3

        "browser" : "ali-sls-ilogtail"
        "status" : 200
    • Logtail插件处理配置 过滤日志

    • 处理结果

      日志

      是否采集

      原因

      日志1

      采集

      request_time字段、request_length字段和request_method字段符合采集日志中的正则表达式。

      日志2

      采集

      request_time字段和request_length字段符合采集日志中的正则表达式。

      日志3

      不采集

      日志中没有符合采集日志中的正则表达式的字段。

JSON配置方式

  • 参数说明

    配置typeprocessor_filter_key_regexdetail说明如下表所示。

    说明

    存在日志字段名称完全匹配Include中的正则表达式,且不匹配Exclude中的正则表达式时,日志才会被采集,否则直接丢弃。

    参数

    类型

    是否必选

    说明

    Include

    string[]

    设置为日志字段的正则表达式,字段之间为与关系。如果日志字段符合对应的正则表达式,则采集该日志。

    Exclude

    string[]

    设置为日志字段的正则表达式,字段之间为或关系。如果日志中任意一个字段符合对应的正则表达式,则丢弃该日志。

  • 配置示例

    采集包含字段名是以request开头的日志,配置示例如下:

    • 原始日志

      • 日志1

        "request_time" : 20
        "request_length": 2314
        "request_method" : "POST"
        "browser" : "aliyun-sdk-java"
      • 日志2

        "request_time" : 70
        "request_method" : "GET"
        "ip" : "192.168.**.**"
      • 日志3

        "browser" : "ali-sls-ilogtail"
        "status" : 200
    • Logtail插件处理配置

      {
         "type" : "processor_filter_key_regex",
          "detail" : {
               "Include" : [
                  "request.*"
               ]
          }
      }
    • 处理结果

      日志

      是否采集

      原因

      日志1

      采集

      request_time字段、request_length字段和request_method字段符合Include中的正则表达式。

      日志2

      采集

      request_time字段和request_length字段符合Include中的正则表达式。

      日志3

      不采集

      日志中没有符合Include中的正则表达式的字段。

相关文档