您可以通过正则模式、标定模式、单字符分隔符模式、多字符分隔符模式、键值对模式提取日志字段。本文介绍各个模式的参数说明和配置示例。
正则模式
通过正则表达式提取目标字段。
- 参数说明
配置type为processor_regex,detail说明如下表所示。
参数 类型 是否必选 说明 SourceKey String 是 原始字段名。 Regex String 是 正则表达式,使用 ()
标注待提取的字段。Keys String数组 是 提取的字段名,例如["ip", "time", "method"]。 NoKeyError Boolean 否 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用false,表示不报错。 NoMatchError Boolean 否 正则表达式与原始字段的值不匹配时是否报错。如果未添加该参数,则默认使用false,表示不报错。 KeepSource Boolean 否 是否保留原始字段。如果未添加该参数,则默认使用false,表示不保留。 FullMatch Boolean 否 如果未添加该参数,则默认使用true,表示只有字段完全匹配Regex参数中的正则表达式时才被提取。配置为false,表示部分字段匹配也会进行提取。 - 配置示例
使用正则模式提取content字段的值,并设置字段名为ip、time、method、url、request_time、request_length、status、length、ref_url和browser。配置示例如下:
- 原始数据
"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展开。
- 参数说明
配置type为processor_anchor,detail说明如下表所示。
参数 类型 是否必选 说明 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,表示不展开。 仅当FieldType为json时生效。
ExpondConnecter String 否 JSON展开的连接符。如果未添加该参数,则默认使用下划线(_)。 MaxExpondDepth Int 否 JSON展开最大深度。如果未添加该参数,则默认为0,表示无限制。 - 配置示例
使用标定模式提取content字段的值,并设置字段名为time、val_key1、val_key2、val_key3、value_key4_inner1、value_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"
- 原始数据
单字符分隔符模式
通过单字符的分隔符提取字段。该方式支持使用引用符对分隔符进行包裹。
- 参数说明
配置type为processor_split_char,detail说明如下表所示。
参数 类型 是否必选 说明 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字段的值,并设置字段名为ip、time、method、url、request_time、request_length、status、length、ref_url和browser。配置示例如下:
- 原始日志
"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"
- 原始日志
多字符分隔符模式
通过多字符的分隔符提取字段。该方式不支持指定引用符对分隔符进行包裹。
- 参数说明
配置type为processor_split_string,detail说明如下表所示。
参数 类型 是否必选 说明 SourceKey String 是 原始字段名。 SplitSep String 是 分隔符。您可设置不可见字符,例如\u0001\u0002。 SplitKeys String数组 是 分割后的字段名,例如["key1","key2"]。 PreserveOthers Boolean 否 如果待分割的字段长度大于SplitKeys参数中的字段长度时是否保留超出部分。如果未添加该参数,则默认使用false,表示不保留。 ExpandOthers Boolean 否 是否解析超出部分。如果未添加该参数,则默认使用false,表示不继续解析。 ExpandKeyPrefix String 否 超出部分的命名前缀。例如配置expand_,则Key为expand_1、expand_2。 NoKeyError Boolean 否 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用false,表示不报错。 NoMatchError Boolean 否 分隔符不匹配时是否报错。如果未添加该参数,则默认使用false,表示不报错。 KeepSource Boolean 否 是否保留原始字段。如果未添加该参数,则默认使用false,表示不保留。 - 示例
使用分隔符|#|提取content字段的值,并设置字段名为ip、time、method、url、request_time、request_length和status、expand_1、expand_2和expand_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"
- 原始日志
键值对模式
通过切分键值对的方式提取字段。
- 参数说明
配置type为processor_split_key_value,detail说明如下表所示。说明 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\""
- 原始数据
在文档使用中是否遇到以下问题
更多建议
匿名提交