您在使用Logtail採集日誌時,可以添加Logtail外掛程式,通過正則模式、標定模式、CSV模式、單字元分隔字元模式、多字元分隔字元模式、索引值對模式、Grok模式提取日誌欄位。本文介紹各個外掛程式的參數說明和配置樣本。
使用限制
文本日誌和容器標準輸出只支援表單配置方式,其餘輸入外掛程式只支援JSON配置方式。
功能入口
當您需要使用Logtail外掛程式處理日誌時,您可以在建立或修改Logtail採集配置時,添加外掛程式配置。具體操作,請參見處理外掛程式概述。
正則模式
通過Regex提取目標欄位。
表單配置方式
參數說明
配置處理器類型為提取欄位(正則模式),相關參數說明如下表所示。
參數
說明
原始欄位
原始欄位名。
Regex
Regex。您需要使用半形圓括弧
()
標註待提取的欄位。結果欄位
為提取的內容指定欄位名。支援添加多個欄位名。
原始欄位缺失報錯
選中該選項後,如果原始日誌中無您所指定的原始欄位,系統將報錯。
正則不匹配報錯
選中該選項後,如果您所指定的Regex與原始欄位的值不匹配,系統將報錯。
保留原始欄位
選中該選項後,解析後的日誌中將保留原始欄位。
解析失敗保留原始欄位
選中該選項後,如果解析日誌失敗,解析後的日誌中將保留原始欄位。
正則完全符合
選中該選項後,您在結果欄位中設定的所有欄位通過指定的Regex都能與原始欄位的值匹配,欄位值才會被提取。
配置樣本
使用正則模式提取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
是
Regex。您需要使用半形圓括弧
()
標註待提取的欄位。Keys
String數組
是
為提取的內容指定欄位名,例如["ip", "time", "method"]。
NoKeyError
Boolean
否
原始日誌中無您所指定的原始欄位時,系統是否報錯。
true:報錯。
false(預設值):不報錯。
NoMatchError
Boolean
否
您所指定的Regex與原始欄位的值不匹配時,系統是否報錯。
true(預設值):報錯。
false:不報錯。
KeepSource
Boolean
否
解析後的日誌中是否保留原始欄位。
true:保留。
false(預設值):不保留。
FullMatch
Boolean
否
是否完全符合才被提取。
true(預設值):您在Keys參數中設定的所有欄位通過Regex參數中的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"
索引值對模式
通過切分索引值對的方式提取欄位。
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配置方式
參數說明
配置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": "中文",
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欄位的值,並為提取的內容指定欄位名為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", }