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

正则模式

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

  • 参数说明
    配置 typeprocessor_regexdetail说明如下表所示。
    参数 类型 是否必选 说明
    SourceKey String 原始字段名。
    Regex String 正则表达式,使用()标注待提取的字段。
    Keys String数组 提取的字段名,例如["ip", "time", "method"]。
    NoKeyError Boolean 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用false,表示不报错。
    NoMatchError Boolean 正则表达式与原始字段的值不匹配时是否报错。如果未添加该参数,则默认使用false,表示不报错。
    KeepSource Boolean 是否保留原始字段。如果未添加该参数,则默认使用false,表示不保留。
    FullMatch Boolean 如果未添加该参数,则默认使用true,表示只有字段完全匹配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 查找不到关键字时是否报错。如果未添加该参数,则默认使用false,不报错。
    NoKeyError Boolean 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用false,不报错。
    KeepSource Boolean 是否保留原始字段。如果未添加该参数,则默认使用false,表示不保留。
    其中, Anchors参数详细说明如下表所示。
    参数 类型 是否必选 说明
    Start String 起始关键字。如果为空,表示匹配字符串开头。
    Stop String 结束关键字,如果为空,表示匹配字符串结尾。
    FieldName String 提取的字段名。
    FieldType String 字段的类型,取值为string或json。
    ExpondJson Boolean 是否进行JSON展开。如果未添加该参数,则默认使用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"

单字符分隔符模式

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

  • 参数说明
    配置 typeprocessor_split_chardetail说明如下表所示。
    参数 类型 是否必选 说明
    SourceKey String 原始字段名。
    SplitSep String 分隔符。必须为单字符,可设置为不可见字符,例如\u0001
    SplitKeys String数组 分割日志后设置的字段名,例如["ip", "time", "method"]。
    QuoteFlag Boolean 是否使用引用符。如果未添加该参数,则默认使用false,表示不使用。
    Quote String 引用符。必须为单字符,可以为不可见字符,例如\u0001

    仅当QuoteFlag配置为true时有效。

    NoKeyError Boolean 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用false,表示不报错。
    NoMatchError Boolean 分隔符不匹配时是否报错。如果未添加该参数,则默认使用false,表示不报错。
    KeepSource Boolean 是否保留原始字段。如果未添加该参数,则默认使用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"]。
    PreserveOthers Boolean 如果待分割的字段长度大于SplitKeys参数中的字段长度时是否保留超出部分。如果未添加该参数,则默认使用false,表示不保留。
    ExpandOthers Boolean 是否解析超出部分。如果未添加该参数,则默认使用false,表示不继续解析。
    ExpandKeyPrefix String 超出部分的命名前缀。例如配置expand_,则Key为expand_1expand_2
    NoKeyError Boolean 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用false,表示不报错。
    NoMatchError Boolean 分隔符不匹配时是否报错。如果未添加该参数,则默认使用false,表示不报错。
    KeepSource Boolean 是否保留原始字段。如果未添加该参数,则默认使用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,表示保留。
    ErrIfSourceKeyNotFound Boolean 无匹配的原始字段时是否告警。如果未添加该参数,则默认使用true,表示告警。
    DiscardWhenSeparatorNotFound Boolean 无匹配的原始字段时是否丢弃该键值对。如果未添加该参数,则默认使用false,表示不丢弃。
    ErrIfSeparatorNotFound Boolean 当指定的分隔符(Separator)不存在时是否告警。如果未添加该参数,则默认使用true,表示告警。
  • 配置示例
    按照键值对方式分割 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\""