您在使用Logtail采集日志时,可以添加Logtail插件,通过正则模式、标定模式、CSV模式、单字符分隔符模式、多字符分隔符模式、键值对模式、Grok模式提取日志字段。本文介绍各个插件的参数说明和配置示例。
功能入口
当您需要使用Logtail插件处理日志时,您可以在创建或修改Logtail配置时,添加插件配置。具体操作,请参见功能入口。
正则模式
通过正则表达式提取目标字段。
表单配置方式
- 参数说明配置处理器类型为提取字段(正则模式),相关参数说明如下表所示。
参数 说明 原始字段 原始字段名。 正则表达式 正则表达式。您需要使用半角圆括号 ()
标注待提取的字段。结果字段 为提取的内容指定字段名。支持添加多个字段名。 原始字段缺失报错 选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。 正则不匹配报错 选中该选项后,如果您所指定的正则表达式与原始字段的值不匹配,系统将报错。 保留原始字段 选中该选项后,解析后的日志中将保留原始字段。 解析失败保留原始字段 选中该选项后,如果解析日志失败,解析后的日志中将保留原始字段。 正则完全匹配 选中该选项后,您在结果字段中设置的所有字段通过指定的正则表达式都能与原始字段的值匹配,字段值才会被提取。 - 配置示例使用正则模式提取content字段的值,并设置字段名为ip、time、method、url、request_time、request_length、status、length、ref_url和browser。配置示例如下:
- 原始日志
"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配置方式
- 参数说明配置type为processor_regex,detail说明如下表所示。
参数 类型 是否必选 说明 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字段的值,并设置字段名为ip、time、method、url、request_time、request_length、status、length、ref_url和browser。配置示例如下:
- 原始日志
"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字段的值,并设置字段名为time、val_key1、val_key2、val_key3、value_key4_inner1、value_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配置方式
- 参数说明配置type为processor_anchor,detail说明如下表所示。
参数 类型 是否必选 说明 SourceKey String 是 原始字段名。 Anchors Anchor数组 是 标定项列表。 Start String 是 起始关键字。如果为空,表示匹配字符串开头。 Stop String 是 结束关键字。如果为空,表示匹配字符串结尾。 FieldName String 是 为提取的内容指定字段名。 FieldType String 是 字段的类型,取值为string或json。 ExpondJson Boolean 否 是否进行JSON展开。 - true:展开。
- false(默认值):不展开。
仅当FieldType为json时生效。
ExpondConnecter String 否 JSON展开的连接符。默认值为下划线(_)。 MaxExpondDepth Int 否 JSON展开最大深度。默认值为0,表示无限制。 NoAnchorError Boolean 否 查找不到标定项时,系统是否报错。 - true:报错。
- false(默认值):不报错。
NoKeyError Boolean 否 原始日志中无您所指定的原始字段时,系统是否报错。 - true:报错。
- false(默认值):不报错。
KeepSource Boolean 否 解析后的日志中是否保留原始字段。 - true:保留。
- false(默认值):不保留。
- 配置示例
使用标定模式提取content字段的值,并设置字段名为time、val_key1、val_key2、val_key3、value_key4_inner1、value_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插件处理配置
- 处理结果
{ "date": "2022-06-09", "ip": "192.0.2.0", "content": "{\"key1\":\"value\",\"key2\":{\"key3\":\"string\"}}" ...... }
- 原始日志
JSON配置方式
- 参数说明
配置type为processor_csv,detail说明如下表所示。
参数 类型 是否必选 说明 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字段的值,并设置字段名为ip、time、method、url、request_time、request_length、status、length、ref_url和browser。配置示例如下:
- 原始日志
"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配置方式
- 参数说明配置type为processor_split_char,detail说明如下表所示。
参数 类型 是否必选 说明 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字段的值,并设置字段名为ip、time、method、url、request_time、request_length、status、length、ref_url和browser。配置示例如下:
- 原始日志
"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_1、expand_2。 - 配置示例
使用分隔符|#|提取content字段的值,并设置字段名为ip、time、method、url、request_time、request_length和status、expand_1、expand_2和expand_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配置方式
- 参数说明配置type为processor_split_string,detail说明如下表所示。
参数 类型 是否必选 说明 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_1、expand_2。 NoKeyError Boolean 否 原始日志中无您所指定的原始字段时,系统是否报错。 - true:报错。
- false(默认值):不报错。
NoMatchError Boolean 否 您所指定的分隔符与日志中的分隔符不匹配时,系统是否报错。 - true:报错。
- false(默认值):不报错。
KeepSource Boolean 否 解析后的日志中是否保留原始字段。 - true:保留。
- false(默认值):不保留。
- 配置示例
使用分隔符|#|提取content字段的值,并设置字段名为ip、time、method、url、request_time、request_length和status、expand_1、expand_2和expand_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"
- 原始日志
键值对模式
通过切分键值对的方式提取字段。
表单配置方式
- 参数说明配置处理器类型为提取字段(键值对模式),相关参数说明如下表所示。
参数 说明 原始字段 原始字段名。 键值对分隔符 键值对之间的分隔符,默认值为制表符 \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": "中文",
- 原始日志
- 示例1:切换键值对。
JSON配置方式
- 参数说明配置type为processor_split_key_value,detail说明如下表所示。
参数 类型 是否必选 说明 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": "中文",
- 原始日志
- 示例1:切分键值对。
Grok模式
通过Grok表达式提取目标字段。
表单配置方式
- 参数说明配置处理器类型为提取字段(GROK模式),相关参数说明如下表所示。
参数 说明 原始字段 原始字段名。 匹配目标 Grok表达式数组。processor_grok插件会根据此处配置的表达式列表从上至下依次对日志进行匹配,并返回第一条匹配成功的提取结果。 默认支持的表达式,请参见processor_grok。如果链接中无您需要的表达式,请在自定义Grok模式中输入自定义的Grok表达式。
说明 配置多条Grok表达式,可能影响性能。建议不超过5条。自定义Grok模式 输入自定义的规则名和Grok表达式。 自定义Grok模式文件目录 自定义的Grok模式文件所在的目录。processor_grok插件会读取目录内的所有文件。 重要 更新自定义的Grok模式文件后,需重启Logtail才能生效。最长匹配时间 通过Grok表达式提取字段的最大尝试时间,单位:毫秒。设置为0或者留空时,表示不会超时。 保留解析失败日志 选中该选项后,如果解析失败,系统将保留该日志。 保留原始字段 选中该选项后,解析后的日志中将保留原始字段。 原始字段缺失报错 选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。 匹配目标全不匹配报错 选中该选项后,如果匹配目标中设置的表达式全部与日志不匹配,系统将报错。 匹配超时报错 选中该选项后,如果匹配超时,系统将报错。 - 配置示例
使用Grok模式提取content字段的值,并为提取的内容指定字段名为year、month和day。配置示例如下:
- 原始日志
"content" : "2022 October 17"
- Logtail插件处理配置
- 处理结果
"year":"2022" "month":"October" "day":"17"
- 原始日志
JSON配置方式
- 参数说明配置type为processor_grok,detail说明如下表所示。
参数 类型 是否必选 说明 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字段的值,并为提取的内容指定字段名为year、month和day。配置示例如下:
- 原始日志
"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", }
- 针对第一条日志,processor_grok插件使用Match参数中的第一个表达式
- 原始日志