提取字段

您在使用Logtail采集日志时,可以添加Logtail插件,通过正则模式、标定模式、CSV模式、单字符分隔符模式、多字符分隔符模式、键值对模式、Grok模式提取日志字段。本文介绍各个插件的参数说明和配置示例。

使用限制

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

功能入口

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

正则模式

通过正则表达式提取目标字段。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(正则模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    正则表达式

    正则表达式。您需要使用半角圆括号()标注待提取的字段。

    结果字段

    为提取的内容指定字段名。支持添加多个字段名。

    原始字段缺失报错

    选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。

    正则不匹配报错

    选中该选项后,如果您所指定的正则表达式与原始字段的值不匹配,系统将报错。

    保留原始字段

    选中该选项后,解析后的日志中将保留原始字段。

    解析失败保留原始字段

    选中该选项后,如果解析日志失败,解析后的日志中将保留原始字段。

    正则完全匹配

    选中该选项后,您在结果字段中设置的所有字段通过指定的正则表达式都能与原始字段的值匹配,字段值才会被提取。

  • 配置示例

    使用正则模式提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatuslengthref_urlbrowser。配置示例如下:

    • 原始日志

      "content" : "10.200.**.** - - [10/Aug/2022:14:57:51 +0800] \"POST /PutData?
      Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature> HTTP/1.1\" 0.024 18204 200 37 \"-\" \"aliyun-sdk-java"
    • Logtail插件处理配置提取字段(正则模式)

    • 处理结果

      "ip" : "10.200.**.**"
      "time" : "10/Aug/2022:14:57:51"
      "method" : "POST"
      "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>"
      "request_time" : "0.024"
      "request_length" : "18204"
      "status" : "200"
      "length" : "27"
      "ref_url" : "-"
      "browser" : "aliyun-sdk-java"

JSON配置方式

  • 参数说明

    配置typeprocessor_regexdetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    Regex

    String

    正则表达式。您需要使用半角圆括号()标注待提取的字段。

    Keys

    String数组

    为提取的内容指定字段名,例如["ip", "time", "method"]。

    NoKeyError

    Boolean

    原始日志中无您所指定的原始字段时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    NoMatchError

    Boolean

    您所指定的正则表达式与原始字段的值不匹配时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

    KeepSource

    Boolean

    解析后的日志中是否保留原始字段。

    • true:保留。

    • false(默认值):不保留。

    FullMatch

    Boolean

    是否完全匹配才被提取。

    • true(默认值):您在Keys参数中设置的所有字段通过Regex参数中的正则表达式都能与原始字段的值匹配,字段值才会被提取。

    • false:部分字段匹配也会进行提取。

    KeepSourceIfParseError

    Boolean

    解析日志失败时,解析后的日志中是否将保留原始字段。

    • true(默认值):保留。

    • false:不保留。

  • 配置示例

    使用正则模式提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatuslengthref_urlbrowser。配置示例如下:

    • 原始日志

      "content" : "10.200.**.** - - [10/Aug/2022:14:57:51 +0800] \"POST /PutData?
      Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature> HTTP/1.1\" 0.024 18204 200 37 \"-\" \"aliyun-sdk-java"
    • Logtail插件处理配置

      {
          "type" : "processor_regex",
          "detail" : {"SourceKey" : "content",
               "Regex" : "([\\d\\.]+) \\S+ \\S+ \\[(\\S+) \\S+\\] \"(\\w+) ([^\\\"]*)\" ([\\d\\.]+) (\\d+) (\\d+) (\\d+|-) \"([^\\\"]*)\" \"([^\\\"]*)\" (\\d+)",
               "Keys"   : ["ip", "time", "method", "url", "request_time", "request_length", "status", "length", "ref_url", "browser"],
               "NoKeyError" : true,
               "NoMatchError" : true,
               "KeepSource" : false
          }
      }
    • 处理结果

      "ip" : "10.200.**.**"
      "time" : "10/Aug/2022:14:57:51"
      "method" : "POST"
      "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>"
      "request_time" : "0.024"
      "request_length" : "18204"
      "status" : "200"
      "length" : "27"
      "ref_url" : "-"
      "browser" : "aliyun-sdk-java"

标定模式

通过标定起始和结束关键字进行字段提取。如果是JSON类型的字段,您可以进行JSON展开。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(标定模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    标定项列表

    标定项列表。

    起始关键字

    起始关键字。如果为空,表示匹配字符串开头。

    结束关键字

    结束关键字。如果为空,表示匹配字符串结尾。

    结果字段

    为提取的内容指定字段名。

    字段类型

    字段的类型,取值为string或json。

    JSON展开

    是否进行JSON展开。

    JSON展开连接符

    JSON展开的连接符,默认值为下划线(_)。

    JSON展开最大深度

    JSON展开最大深度。默认值为0,表示无限制。

    原始字段缺失报错

    选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。

    标定项缺失报错

    选中该选项后,如果原始日志中无匹配的标定项,系统将报错。

    保留原始字段

    选中该选项后,解析后的日志中将保留原始字段。

  • 配置示例

    使用标定模式提取content字段的值,并设置字段名为timeval_key1val_key2val_key3value_key4_inner1value_key4_inner2。配置示例如下:

    • 原始日志

      "content" : "time:2022.09.12 20:55:36\t json:{\"key1\" : \"xx\", \"key2\": false, \"key3\":123.456, \"key4\" : { \"inner1\" : 1, \"inner2\" : false}}"
    • Logtail插件处理配置 提取字段(标定模式)

    • 处理结果

      "time" : "2022.09.12 20:55:36"
      "val_key1" : "xx"
      "val_key2" : "false"
      "val_key3" : "123.456"
      "value_key4_inner1" : "1"
      "value_key4_inner2" : "false"

JSON配置方式

  • 参数说明

    配置typeprocessor_anchordetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    Anchors

    Anchor数组

    标定项列表。

    Start

    String

    起始关键字。如果为空,表示匹配字符串开头。

    Stop

    String

    结束关键字。如果为空,表示匹配字符串结尾。

    FieldName

    String

    为提取的内容指定字段名。

    FieldType

    String

    字段的类型,取值为string或json。

    ExpondJson

    Boolean

    是否进行JSON展开。

    • true:展开。

    • false(默认值):不展开。

    仅当FieldTypejson时生效。

    ExpondConnecter

    String

    JSON展开的连接符。默认值为下划线(_)。

    MaxExpondDepth

    Int

    JSON展开最大深度。默认值为0,表示无限制。

    NoAnchorError

    Boolean

    查找不到标定项时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    NoKeyError

    Boolean

    原始日志中无您所指定的原始字段时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    KeepSource

    Boolean

    解析后的日志中是否保留原始字段。

    • true:保留。

    • false(默认值):不保留。

  • 配置示例

    使用标定模式提取content字段的值,并设置字段名为timeval_key1val_key2val_key3value_key4_inner1value_key4_inner2。配置示例如下:

    • 原始日志

      "content" : "time:2022.09.12 20:55:36\t json:{\"key1\" : \"xx\", \"key2\": false, \"key3\":123.456, \"key4\" : { \"inner1\" : 1, \"inner2\" : false}}"
    • Logtail插件处理配置

      {
         "type" : "processor_anchor",
         "detail" : {"SourceKey" : "content",
            "Anchors" : [
                {
                    "Start" : "time",
                    "Stop" : "\t",
                    "FieldName" : "time",
                    "FieldType" : "string",
                    "ExpondJson" : false
                },
                {
                    "Start" : "json:",
                    "Stop" : "",
                    "FieldName" : "val",
                    "FieldType" : "json",
                    "ExpondJson" : true 
                }
            ]
        }
      }
    • 处理结果

      "time" : "2022.09.12 20:55:36"
      "val_key1" : "xx"
      "val_key2" : "false"
      "val_key3" : "123.456"
      "value_key4_inner1" : "1"
      "value_key4_inner2" : "false"

CSV模式

通过CSV模式解析CSV格式的日志。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(CSV模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    结果字段

    为提取的内容指定字段名。支持添加多个字段名。

    重要

    待分割的字段数量小于结果字段中的字段数量时,结果字段中多余的字段将被忽略。

    分隔符

    分隔符,默认值为半角逗号(,)。

    保留超出部分

    选中该选项后,如果待分割的字段数量大于结果字段中的字段数量,系统将保留超出部分的内容。

    解析超出部分

    选中该选项后,系统将解析超出部分的内容,并且通过超出部分字段前缀指定超过部分字段的命名前缀。

    如果您选中保留超出部分,但未选中解析超出部分,则超出部分的内容将被存储于_decode_preserve_字段中。

    说明

    如果超出部分的内容中存在不规范内容时,您需要根据CSV格式对其进行规范化处理后,再进行存储操作。

    超出部分字段前缀

    超出部分的字段命名前缀。例如设置为expand_,则字段名为expand_1、expand_2。

    忽略字段前置空格

    选中该选项后,系统将忽略字段值中的前置空格。

    保留原始字段

    选中该选项后,解析的日志中将保留原始字段。

    原始字段缺失报错

    选中该选项后,如果日志中无您所指定的原始字段,系统将报错。

  • 配置示例

    提取csv字段的值,配置示例如下:

    • 原始日志

      {
          "csv": "2022-06-09,192.0.2.0,\"{\"\"key1\"\":\"\"value\"\",\"\"key2\"\":{\"\"key3\"\":\"\"string\"\"}}\"",
          ......
      }
    • Logtail插件处理配置提取字段(CSV模式)

    • 处理结果

      {
          "date": "2022-06-09",
          "ip": "192.0.2.0",
          "content": "{\"key1\":\"value\",\"key2\":{\"key3\":\"string\"}}"
          ......
      
      }

JSON配置方式

  • 参数说明

    配置typeprocessor_csvdetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    SplitKeys

    String数组

    为提取的内容指定字段名,例如["date", "ip", "content"]。

    重要

    待分割的字段数量小于SplitKeys参数中的字段数量时,SplitKeys参数中多余的字段将被忽略。

    PreserveOthers

    Boolean

    待分割的字段数量大于SplitKeys参数中的字段数量时,是否保留超出部分。

    • true:保留。

    • false(默认值):不保留。

    ExpandOthers

    Boolean

    是否解析超出部分。

    • true:解析。

      您可以通过ExpandOthers参数解析超出部分,然后通过ExpandKeyPrefix参数指定超过部分字段的命名前缀。

    • false(默认值):不解析。

      如果您设置PreserveOthers为true且设置ExpandOthers为false,则超出部分的内容将被存储到_decode_preserve_字段中。

      说明

      如果多余的字段内容中存在不规范内容时,您需要根据CSV格式对其进行规范化处理后,再进行存储操作。

    ExpandKeyPrefix

    String

    超出部分的字段命名前缀。例如配置为expand_,则字段名为expand_1、expand_2。

    TrimLeadingSpace

    Boolean

    是否忽略字段值中的前置空格。

    • true:忽略。

    • false(默认值):不忽略。

    SplitSep

    String

    分隔符。默认值为半角逗号(,)。

    KeepSource

    Boolean

    解析后的日志中是否保留原始字段。

    • true:保留。

    • false(默认值):不保留。

    NoKeyError

    Boolean

    原始日志中无您指定的原始字段时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

  • 配置示例

    提取csv字段的值,配置示例如下:

    • 原始日志

      {
          "csv": "2022-06-09,192.0.2.0,\"{\"\"key1\"\":\"\"value\"\",\"\"key2\"\":{\"\"key3\"\":\"\"string\"\"}}\"",
          ......
      }
    • Logtail插件处理配置

       {
          ......
          "type":"processor_csv",
          "detail":{
              "SourceKey":"csv",
              "SplitKeys":["date", "ip", "content"],
          }
          ......
      }
    • 处理结果

      {
          "date": "2022-06-09",
          "ip": "192.0.2.0",
          "content": "{\"key1\":\"value\",\"key2\":{\"key3\":\"string\"}}"
          ......
      
      }

单字符分隔符模式

通过单字符的分隔符提取字段。该方式支持使用引用符对分隔符进行包裹。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(单字符分隔符模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    分隔符

    分隔符。必须为单字符,可设置为不可见字符,例如\u0001

    结果字段

    为提取的内容指定字段名。

    使用引用符

    选中该选项后,您可以使用引用符。

    引用符

    引用符。必须为单字符,可以为不可见字符,例如\u0001

    原始字段缺失报错

    选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。

    分隔符不匹配报错

    选中该选项后,如果您所指定的分隔符与原始日志中的分隔符不匹配,系统将报错。

    保留原始字段

    选中该选项后,解析后的日志中将保留原始字段。

  • 示例

    使用竖线(|)分隔符提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatuslengthref_urlbrowser。配置示例如下:

    • 原始日志

      "content" : "10.**.**.**|10/Aug/2022:14:57:51 +0800|POST|PutData?
      Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>|0.024|18204|200|37|-|
      aliyun-sdk-java"
    • Logtail处理插件配置 提取字段(单字符分隔符模式)

    • 处理结果

      "ip" : "10.**.**.**"
      "time" : "10/Aug/2022:14:57:51 +0800"
      "method" : "POST"
      "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>"
      "request_time" : "0.024"
      "request_length" : "18204"
      "status" : "200"
      "length" : "27"
      "ref_url" : "-"
      "browser" : "aliyun-sdk-java"

JSON配置方式

  • 参数说明

    配置typeprocessor_split_chardetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    SplitSep

    String

    分隔符。必须为单字符,可设置为不可见字符,例如\u0001

    SplitKeys

    String数组

    为提取的内容指定字段名,例如["ip", "time", "method"]。

    PreserveOthers

    Boolean

    待分割的字段数量大于SplitKeys参数中的字段数量时,是否保留超出部分。

    • true:保留。

    • false(默认值):不保留。

    QuoteFlag

    Boolean

    是否使用引用符。

    • true:使用。

    • false(默认值):不使用。

    Quote

    String

    引用符。必须为单字符,可以为不可见字符,例如\u0001

    仅当QuoteFlag配置为true时有效。

    NoKeyError

    Boolean

    原始日志中无您指定的原始字段时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    NoMatchError

    Boolean

    您所指定的分隔符与日志中的分隔符不匹配时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    KeepSource

    Boolean

    被解析后的日志中是否保留原始字段。

    • true:保留。

    • false(默认值):不保留。

  • 示例

    使用竖线(|)分隔符提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatuslengthref_urlbrowser。配置示例如下:

    • 原始日志

      "content" : "10.**.**.**|10/Aug/2022:14:57:51 +0800|POST|PutData?
      Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>|0.024|18204|200|37|-|
      aliyun-sdk-java"
    • Logtail处理插件配置

      {
         "type" : "processor_split_char",
         "detail" : {"SourceKey" : "content",
            "SplitSep" : "|",
            "SplitKeys" : ["ip", "time", "method", "url", "request_time", "request_length", "status", "length", "ref_url", "browser"]     
        }
      }
    • 处理结果

      "ip" : "10.**.**.**"
      "time" : "10/Aug/2022:14:57:51 +0800"
      "method" : "POST"
      "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>"
      "request_time" : "0.024"
      "request_length" : "18204"
      "status" : "200"
      "length" : "27"
      "ref_url" : "-"
      "browser" : "aliyun-sdk-java"

多字符分隔符模式

通过多字符的分隔符提取字段。该方式不支持指定引用符对分隔符进行包裹。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(多字符分隔符模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    分隔字符串

    分隔符。您可设置不可见字符,例如\u0001\u0002

    结果字段

    为提取的日志指定字段名。

    重要

    待分割的字段数量小于结果字段中的字段数量时,结果字段中多余的字段将被忽略。

    原始字段缺失报错

    选中该选项后,如果日志中无您指定的原始字段,系统将报错。

    分隔符不匹配报错

    选中该选项后,如果您所指定的分隔符与日志中的分隔符不匹配,系统将报错。

    保留原始字段

    选中该选项后,解析后的日志中将保留原始字段。

    保留超出部分

    选中该选项后,如果待分割的字段数量大于结果字段中的字段数量,系统将保留超出部分的内容。

    解析超出部分

    选中该选项后,如果待分割的字段数量大于结果字段中的字段数量,系统将解析超出部分的内容,并且您可以通过超出部分字段命名前缀指定超过部分字段的命名前缀。

    超出部分字段命名前缀

    超出部分的字段命名前缀。例如配置为expand_,则字段名为expand_1expand_2

  • 配置示例

    使用分隔符|#|提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatusexpand_1expand_2expand_3。配置示例如下:

    • 原始日志

      "content" : "10.**.**.**|#|10/Aug/2022:14:57:51 +0800|#|POST|#|PutData?
      Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>|#|0.024|#|18204|#|200|#|27|#|-|#|
      aliyun-sdk-java"
    • Logtail插件处理配置 提取字段(多字符分隔符模式)

    • 处理结果

      "ip" : "10.**.**.**"
      "time" : "10/Aug/2022:14:57:51 +0800"
      "method" : "POST"
      "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>"
      "request_time" : "0.024"
      "request_length" : "18204"
      "status" : "200"
      "expand_1" : "27"
      "expand_2" : "-"
      "expand_3" : "aliyun-sdk-java"

JSON配置方式

  • 参数说明

    配置typeprocessor_split_stringdetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    SplitSep

    String

    分隔符。您可设置不可见字符,例如\u0001\u0002

    SplitKeys

    String数组

    为提取的日志内容指定字段名,例如["key1","key2"]。

    说明

    待分割的字段数量小于SplitKeys参数中的字段数量时,SplitKeys参数中多余的字段将被忽略。

    PreserveOthers

    Boolean

    待分割的字段数量大于SplitKeys参数中的字段数量时,是否保留超出部分。

    • true:保留。

    • false(默认值):不保留。

    ExpandOthers

    Boolean

    待分割的字段数量大于SplitKeys参数中的字段数量时,是否解析超出部分。

    • true:解析。

      您可以通过ExpandOthers参数解析超出部分,然后通过ExpandKeyPrefix参数指定超过部分字段的命名前缀。

    • false(默认值):不解析。

    ExpandKeyPrefix

    String

    超出部分的命名前缀。例如配置为expand_,则字段名为expand_1expand_2

    NoKeyError

    Boolean

    原始日志中无您所指定的原始字段时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    NoMatchError

    Boolean

    您所指定的分隔符与日志中的分隔符不匹配时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    KeepSource

    Boolean

    解析后的日志中是否保留原始字段。

    • true:保留。

    • false(默认值):不保留。

  • 配置示例

    使用分隔符|#|提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatusexpand_1expand_2expand_3。配置示例如下:

    • 原始日志

      "content" : "10.**.**.**|#|10/Aug/2022:14:57:51 +0800|#|POST|#|PutData?
      Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>|#|0.024|#|18204|#|200|#|27|#|-|#|
      aliyun-sdk-java"
    • Logtail插件处理配置

      {
         "type" : "processor_split_string",
         "detail" : {"SourceKey" : "content",
            "SplitSep" : "|#|",
            "SplitKeys" : ["ip", "time", "method", "url", "request_time", "request_length", "status"],
            "PreserveOthers" : true,
            "ExpandOthers" : true,
            "ExpandKeyPrefix" : "expand_"
        }
      }
    • 处理结果

      "ip" : "10.**.**.**"
      "time" : "10/Aug/2022:14:57:51 +0800"
      "method" : "POST"
      "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>"
      "request_time" : "0.024"
      "request_length" : "18204"
      "status" : "200"
      "expand_1" : "27"
      "expand_2" : "-"
      "expand_3" : "aliyun-sdk-java"

键值对模式

通过切分键值对的方式提取字段。

说明

Logtail 0.16.26及以上版本支持processor_split_key_value插件。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(键值对模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    键值对分隔符

    键值对之间的分隔符,默认值为制表符\t

    键与值分隔符

    单个键值对中键与值之间的分隔符,默认值为半角冒号(:)。

    保留原始字段

    选中该选项后,系统将保留原始字段。

    原始字段缺失报错

    选中该选项后,如果日志中无您指定的原始字段,系统将报错。

    丢弃分隔符匹配失败键值对

    选中该选项后,如果您所指定分隔符与日志中的分隔符不匹配,系统将丢弃该键值对。

    键与值分隔符缺失报错

    选中该选项后,如果日志中无您指定的分隔符,系统将报错。

    键为空报错

    选中该选项后,如果分隔后的键为空,系统将报错。

    引用符

    如果值被引用符包裹,则将提取引用符内的值,支持设置多字符。

    重要

    当引用符内包含反斜线(\)与引用符连用时,该反斜线(\)将作为值的一部分输出。

  • 配置示例

    • 示例1:切换键值对。

      按照键值对方式分割content字段的值。其中,键值对间分隔符为制表符\t,键值对中的分隔符为半角冒号(:)。配置示例如下:

      • 原始日志

        "content": "class:main\tuserid:123456\tmethod:get\tmessage:\"wrong user\""
      • Logtail插件处理配置提取字段(键值对模式)

      • 处理结果

        "content": "class:main\tuserid:123456\tmethod:get\tmessage:\"wrong user\""
        "class": "main"
        "userid": "123456"
        "method": "get"
        "message": "\"wrong user\""
    • 示例2:包含引用符的键值对切分。

      按照键值对方式分割content字段的值。其中,键值对间分隔符为制表符\t,键值对中的分隔符为半角冒号(:),引用符为双引号(")。配置示例如下:

      • 原始日志

        "content": "class:main http_user_agent:\"User Agent\" \"中文\" \"hello\\t\\\"ilogtail\\\"\\tworld\""
      • Logtail插件处理配置键值对

      • 处理结果

        "class": "main",
        "http_user_agent": "User Agent",
        "no_separator_key_0": "中文",
        "no_separator_key_1": "hello\t\"ilogtail\"\tworld",
    • 示例3:包含多字符引用符的键值对切分。

      按照键值对方式分割content字段的值。其中,键值对间分隔符为制表符\t,键值对中的分隔符为半角冒号(:),引用符为双引号("")。配置示例如下:

      • 原始日志

        "content": "class:main http_user_agent:\"\"\"User Agent\"\"\" \"\"\"中文\"\"\""
      • Logtail插件处理配置键值对模式

      • 处理结果

        "class": "main",
        "http_user_agent": "User Agent",
        "no_separator_key_0": "中文",

JSON配置方式

  • 参数说明

    配置typeprocessor_split_key_valuedetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    string

    原始字段名。

    Delimiter

    string

    键值对之间的分隔符,默认值为制表符\t

    Separator

    string

    单个键值对中键与值之间的分隔符,默认值为半角冒号(:)。

    KeepSource

    Boolean

    解析后的日志中是否保留原始字段。

    • true:保留。

    • false(默认值):不保留。

    ErrIfSourceKeyNotFound

    Boolean

    原始日志中无您所指定的原始字段时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

    DiscardWhenSeparatorNotFound

    Boolean

    无匹配的分隔符时是否丢弃该键值对。

    • true:丢弃。

    • false(默认值):不丢弃。

    ErrIfSeparatorNotFound

    Boolean

    当指定的分隔符不存在时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

    ErrIfKeyIsEmpty

    Boolean

    当分隔后的键为空时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

    Quote

    String

    引用符,当设定后若值被引用符包含,就提取引用符内的值,支持多字符。默认不开启引用符功能。

    重要
    • 如果引用符为双引号(""),需要添加转义符,即添加反斜线(\)。

    • 当引用符内包含反斜线(\)与引用符连用时,该反斜线(\)将作为值的一部分输出。

  • 配置示例

    • 示例1:切分键值对。

      按照键值对方式分割content字段的值。其中,键值对间分隔符为制表符\t,键值对中的分隔符为半角冒号(:)。配置示例如下:

      • 原始日志

        "content": "class:main\tuserid:123456\tmethod:get\tmessage:\"wrong user\""
      • Logtail插件处理配置

        {
          "processors":[
            {
              "type":"processor_split_key_value",
              "detail": {
                "SourceKey": "content",
                "Delimiter": "\t",
                "Separator": ":",
                "KeepSource": true
              }
            }
          ]
        }
      • 处理结果

        "content": "class:main\tuserid:123456\tmethod:get\tmessage:\"wrong user\""
        "class": "main"
        "userid": "123456"
        "method": "get"
        "message": "\"wrong user\""
    • 示例2:切分键值对。

      按照键值对方式分割content字段的值。其中,键值对间分隔符为制表符\t,键值对中的分隔符为半角冒号(:),引用符为双引号(")。配置示例如下:

      • 原始日志

        "content": "class:main http_user_agent:\"User Agent\" \"中文\" \"hello\\t\\\"ilogtail\\\"\\tworld\""
      • Logtail插件处理配置

        {
          "processors":[
            {
              "type":"processor_split_key_value",
              "detail": {
                "SourceKey": "content",
                "Delimiter": " ",
                "Separator": ":",
                "Quote": "\""
              }
            }
          ]
        }
      • 处理结果

        "class": "main",
        "http_user_agent": "User Agent",
        "no_separator_key_0": "中文",
        "no_separator_key_1": "hello\t\"ilogtail\"\tworld",
    • 示例3:切分键值对。

      按照键值对方式分割content字段的值。其中,键值对间分隔符为制表符\t,键值对中的分隔符为半角冒号(:),引用符为双引号(""")。配置示例如下:

      • 原始日志

        "content": "class:main http_user_agent:\"\"\"User Agent\"\"\" \"\"\"中文\"\"\""
      • Logtail插件处理配置

        {
          "processors":[
            {
              "type":"processor_split_key_value",
              "detail": {
                "SourceKey": "content",
                "Delimiter": " ",
                "Separator": ":",
                "Quote": "\"\"\""
              }
            }
          ]
        }
      • 处理结果

        "class": "main",
        "http_user_agent": "User Agent",
        "no_separator_key_0": "中文",

Grok模式

通过Grok表达式提取目标字段。

重要

Logtail 1.2.0及以上版本支持processor_grok插件。

表单配置方式

  • 参数说明

    配置处理器类型提取字段(GROK模式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    匹配目标

    Grok表达式数组。processor_grok插件会根据此处配置的表达式列表从上至下依次对日志进行匹配,并返回第一条匹配成功的提取结果。

    默认支持的表达式,请参见processor_grok。如果链接中无您需要的表达式,请在自定义Grok模式中输入自定义的Grok表达式。

    说明

    配置多条Grok表达式,可能影响性能。建议不超过5条。

    自定义Grok模式

    输入自定义的规则名和Grok表达式。

    自定义Grok模式文件目录

    自定义的Grok模式文件所在的目录。processor_grok插件会读取目录内的所有文件。

    重要

    更新自定义的Grok模式文件后,需重启Logtail才能生效。

    最长匹配时间

    通过Grok表达式提取字段的最大尝试时间,单位:毫秒。设置为0或者留空时,表示不会超时。

    保留解析失败日志

    选中该选项后,如果解析失败,系统将保留该日志。

    保留原始字段

    选中该选项后,解析后的日志中将保留原始字段。

    原始字段缺失报错

    选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。

    匹配目标全不匹配报错

    选中该选项后,如果匹配目标中设置的表达式全部与日志不匹配,系统将报错。

    匹配超时报错

    选中该选项后,如果匹配超时,系统将报错。

  • 配置示例

    使用Grok模式提取content字段的值,并为提取的内容指定字段名为yearmonthday。配置示例如下:

    • 原始日志

      "content" : "2022 October 17"
    • Logtail插件处理配置GROK模式

    • 处理结果

      "year":"2022"
      "month":"October"
      "day":"17"

JSON配置方式

  • 参数说明

    配置typeprocessor_grokdetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    CustomPatternDir

    String数组

    自定义的Grok模式文件所在的目录。processor_grok插件会读取目录内的所有文件。

    未添加该参数时,表示不导入自定义的Grok模式文件。

    重要

    更新自定义的Grok模式文件后,需重启Logtail才能生效。

    CustomPatterns

    Map

    自定义的GROK模式,key为规则名,value为Grok表达式。

    默认支持的表达式,请参见processor_grok。如果链接中无您需要的表达式,请在Match中输入自定义的Grok表达式。

    未添加该参数时,表示不使用自定义的GROK模式。

    SourceKey

    String

    原始字段名。默认值为content字段。

    Match

    String数组

    Grok表达式数组。processor_grok插件会根据此处配置的表达式列表从上至下依次对日志进行匹配,并返回第一条匹配成功的提取结果。

    说明

    配置多条Grok表达式,可能影响性能。建议不超过5条。

    TimeoutMilliSeconds

    Long

    通过Grok表达式提取字段的最大尝试时间,单位:毫秒。

    未添加该参数或设置为0时,表示不会超时。

    IgnoreParseFailure

    Boolean

    是否忽略解析失败的日志。

    • true(默认值):忽略。

    • false:删除。

    KeepSource

    Boolean

    是否在解析成功后保留原始字段。

    • true(默认值):保留。

    • false:丢弃。

    NoKeyError

    Boolean

    原始日志中无您所指定的原始字段时,系统是否报错。

    • true:报错。

    • false(默认值):不报错。

    NoMatchError

    Boolean

    Match参数中设置的表达式全部与日志不匹配时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

    TimeoutError

    Boolean

    匹配超时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

  • 示例一

    使用Grok模式提取content字段的值,并为提取的内容指定字段名为yearmonthday。配置示例如下:

    • 原始日志

      "content" : "2022 October 17"
    • Logtail插件处理配置

      {
         "type" : "processor_grok",
         "detail" : {
            "KeepSource" : false,
            "Match" : [
               "%{YEAR:year} %{MONTH:month} %{MONTHDAY:day}"
            ],
            "IgnoreParseFailure" : false
         }
      }
    • 处理结果

      "year":"2022"
      "month":"October"
      "day":"17"
  • 示例二

    使用Grok模式提取多条日志中content字段的值,并根据不同的Grok表达式解析为不同结果。配置示例如下:

    • 原始日志

      {
          "content" : "begin 123.456 end"
      }
      {
          "content" : "2019 June 24 \"I am iron man"\"
      }
      {
          "content" : "WRONG LOG"
      }
      {
          "content" : "10.0.0.0 GET /index.html 15824 0.043"
      }
    • Logtail插件处理配置

      {
              "type" : "processor_grok",
              "detail" : {
                      "CustomPatterns" : {
                              "HTTP" : "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
                      },
                      "IgnoreParseFailure" : false,
                      "KeepSource" : false,
                      "Match" : [
                              "%{HTTP}",
                              "%{WORD:word1} %{NUMBER:request_time} %{WORD:word2}",
                              "%{YEAR:year} %{MONTH:month} %{MONTHDAY:day} %{QUOTEDSTRING:motto}"
                      ],
                      "SourceKey" : "content"
              },
      }
    • 处理结果

      • 针对第一条日志,processor_grok插件使用Match参数中的第一个表达式%{HTTP}匹配失败,使用第二个表达式%{WORD:word1} %{NUMBER:request_time} %{WORD:word2}匹配成功,因此根据第二个表达式返回提取结果。

        由于设置KeepSource参数为false,因此原日志中的content字段被丢弃。

      • 针对第二条日志,processor_grok插件使用Match参数中的第一个表达式%{HTTP}和第二个表达式%{WORD:word1} %{NUMBER:request_time} %{WORD:word2}匹配失败,使用第三个表达式%{YEAR:year} %{MONTH:month} %{MONTHDAY:day} %{QUOTEDSTRING:motto}匹配成功,因此根据第三个表达式返回提取结果。

      • 针对第三条日志,processor_grok插件使用Match参数中的三个表达式均匹配失败,且您设置了IgnoreParseFailure参数为false,因此第三条日志被丢弃。

      • 针对第四条日志,processor_grok插件使用Match参数中的第一个表达式%{HTTP}匹配日志成功,因此根据第一个表达式返回提取结果。

      {
        "word1":"begin",
        "request_time":"123.456",
        "word2":"end",
      }
      {
        "year":"2019",
        "month":"June",
        "day":"24",
        "motto":"\"I am iron man"\",
      }
      {
        "client":"10.0.0.0",
        "method":"GET",
        "request":"/index.html",
        "bytes":"15824",
        "duration":"0.043",
      }