您可以通过正则模式、标定模式、CSV模式、单字符分隔符模式、多字符分隔符模式、键值对模式提取日志字段。本文介绍各个模式的参数说明和配置示例。

正则模式

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

  • 参数说明
    配置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:部分字段匹配也会进行提取。

    未添加该参数时,表示完全匹配才被提取。

  • 配置示例
    使用正则模式提取content字段的值,并设置字段名为iptimemethodurlrequest_timerequest_lengthstatuslengthref_urlbrowser。配置示例如下:
    • 原始数据
      "content" : "10.200.**.** - - [10/Aug/2017: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/2017: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展开。

  • 参数说明
    配置typeprocessor_anchordetail说明如下表所示。
    参数 类型 是否必选 说明
    SourceKey String 原始字段名。
    Anchors Anchor数组 标定项列表。
    NoAnchorError Boolean 查找不到关键字时是否报错。
    • true:报错。
    • false:不报错。

    未添加该参数时,表示不报错。

    NoKeyError Boolean 无匹配的原始字段时是否报错。
    • true:报错。
    • false:不报错。

    未添加该参数时,表示不报错。

    KeepSource Boolean 是否保留原始字段。
    • true:保留。
    • false:不保留。

    未添加该参数时,表示不保留。

    其中,Anchors参数详细说明如下表所示。
    参数 类型 是否必选 说明
    Start String 起始关键字。如果为空,表示匹配字符串开头。
    Stop String 结束关键字,如果为空,表示匹配字符串结尾。
    FieldName String 为提取的内容指定字段名。
    FieldType String 字段的类型,取值为string或json。
    ExpondJson Boolean 是否进行JSON展开。
    • true:展开。
    • false:不展开。

    未添加该参数时,表示不展开。

    仅当FieldTypejson时生效。

    ExpondConnecter String JSON展开的连接符。

    未添加该参数时,连接符为下划线(_)。

    MaxExpondDepth Int JSON展开最大深度。

    未添加该参数,最大深度为0,表示无限制。

  • 配置示例

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

    • 原始数据
      "content" : "time:2017.09.12 20:55:36\tjson:{\"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" : "2017.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格式的数据。

  • 参数说明

    配置typeprocessor_csvdetail说明如下表所示。

    参数 类型 是否必选 说明
    SourceKey String 原始字段名。
    SplitKeys String数组 为提取的数据指定字段名,例如["date", "ip", "content"]。
    说明 待分割的字段数量小于SplitKeys参数中的字段数量时,SplitKeys参数中多余的字段将被忽略。
    PreserveOthers Boolean 待分割的字段数量大于SplitKeys参数中的字段数量时,是否保留超出部分。
    • true:保留。
    • false:不保留。

    未添加该参数时,表示不保留。

    ExpandOthers Boolean 是否解析超出部分。
    • true:解析。

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

    • 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\"}}"
          ......
      
      }

单字符分隔符模式

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

  • 参数说明
    配置typeprocessor_split_chardetail说明如下表所示。
    参数 类型 是否必选 说明
    SourceKey String 原始字段名。
    SplitSep String 分隔符。必须为单字符,可设置为不可见字符,例如\u0001
    SplitKeys String数组 为提取的数据指定字段名,例如["ip", "time", "method"]。
    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/2017: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/2017: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"

多字符分隔符模式

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

  • 参数说明
    配置typeprocessor_split_stringdetail说明如下表所示。
    参数 类型 是否必选 说明
    SourceKey String 原始字段名。
    SplitSep String 分隔符。您可设置不可见字符,例如\u0001\u0002
    SplitKeys String数组 为提取的数据指定字段名,例如["key1","key2"]。
    说明 待分割的字段数量小于SplitKeys参数中的字段数量时,SplitKeys参数中多余的字段将被忽略。
    PreserveOthers Boolean 待分割的字段数量大于SplitKeys参数中的字段数量时,是否保留超出部分。
    • true:保留。
    • false:不保留。

    未添加该参数时,表示不保留。

    ExpandOthers Boolean 是否解析超出部分。
    • 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/2017: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/2017: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"

键值对模式

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

  • 参数说明
    配置typeprocessor_split_key_valuedetail说明如下表所示。
    说明 Logtail 0.16.26及以上版本支持此插件。
    参数 类型 是否必选 说明
    SourceKey string 原始字段名。
    Delimiter string 键值对之间的分隔符。

    未添加该参数时,表示分隔符为制表符\t

    Separator string 单个键值对中键与值之间的分隔符。

    未添加该参数时,表示分隔符为半角冒号(:)。

    KeepSource Boolean 提取完毕后是否保留原始字段。
    • true:保留。
    • false:不保留。

    未添加该参数时,表示不保留。

    ErrIfSourceKeyNotFound Boolean 无匹配的原始字段时是否告警。
    • true:告警。
    • false:不告警。

    未添加该参数时,表示告警。

    DiscardWhenSeparatorNotFound Boolean 无匹配的原始字段时是否丢弃该键值对。
    • true:丢弃。
    • false:不丢弃。

    未添加该参数时,表示不丢弃。

    ErrIfSeparatorNotFound Boolean 当指定的分隔符(Separator)不存在时是否告警。
    • true:告警。
    • false:不告警。

    未添加该参数时,表示告警。

  • 配置示例
    按照键值对方式分割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\""