欄位處理類外掛程式用於對欄位進行增刪改、打包、展開、提取等操作。
欄位處理效果樣本
表格展示該原始日誌在分別使用提取欄位外掛程式的標定模式與不使用外掛程式的情況下,儲存到Log Service後的資料結構。使用提取外掛程式能夠結構化資料,為後續查詢提供便利。
|
原始日誌 |
不使用欄位處理外掛程式 |
使用提取欄位外掛程式標定模式 |
|
Content:"time:2022.09.12 20:55:36\t json:{\"key1\" : \"xx\", \"key2\": false, \"key3\":123.456, \"key4\" : { \"inner1\" : 1, \"inner2\" : false}}" |
使用標定模式提取欄位值,設定欄位名為time、val_key1、val_key2、val_key3、value_key4_inner1、value_key4_inner2。
|
欄位處理外掛程式概覽
Log Service提供以下多種類型的欄位處理外掛程式,請按需要進行選擇。
|
外掛程式名稱 |
類型 |
功能說明 |
|
提取欄位 |
拓展 |
支援如下模式:
|
|
添加欄位 |
拓展 |
向日誌中添加新欄位。 |
|
丟棄欄位 |
拓展 |
刪除指定欄位。 |
|
重新命名欄位 |
拓展 |
修改欄位名稱。 |
|
打包欄位 |
拓展 |
將多個欄位打包為一個JSON對象。 |
|
展開JSON欄位 |
拓展 |
將JSON字串欄位展開為獨立欄位。 |
|
欄位值對應 |
拓展 |
按映射表替換或轉換欄位值。 |
|
字串替換 |
拓展 |
實現文本日誌的全文替換、正則提取替換或去除轉義符。 |
功能入口
當您需要使用Logtail外掛程式處理日誌時,您可以在建立或修改Logtail配置時,添加外掛程式。具體操作,請參見原生與拓展處理外掛程式使用說明。
使用限制
-
文本日誌和容器標準輸出只支援表單配置方式,其餘輸入源只支援JSON配置方式。
-
使用正則模式提取,Regex有以下限制
Go語言的Regex引擎基於RE2實現,相比PCRE引擎存在以下限制:
-
命名分組文法差異
Go使用
(?P<name>...)文法,而非PCRE的(?<name>...)文法。 -
不支援的正則模式
-
斷言:
(?=...)、(?!...)、(?<=...)、(?<!...)。 -
條件運算式:
(?(condition)true|false)。 -
遞迴匹配:
(?R)、(?0)。 -
子程式引用:
(?&name)、(?P>name)。 -
原子組:
(?>...)。
-
建議使用Regex101等調試正則時,避免使用以上不支援的正則模式,否則外掛程式將無法處理。
-
提取欄位外掛程式
支援通過正則模式、標定模式、CSV模式、單字元分隔字元模式、多字元分隔字元模式、索引值對模式、Grok模式提取日誌欄位。
正則模式
標定模式
CSV模式
單字元分隔字元模式
多字元分隔字元模式
索引值對模式
Grok模式
添加欄位外掛程式
使用processor_add_fields外掛程式添加日誌欄位。此處介紹processor_add_fields外掛程式的參數說明和配置樣本。
配置說明
Logtail 0.16.28及以上版本支援processor_add_fields外掛程式。
表單配置方式
-
參數說明
配置處理器類型為添加欄位,相關參數說明如下表所示。
參數
說明
添加欄位
待添加的欄位名和欄位值,支援添加多個。
忽略重複欄位
存在相同的欄位名時,是否忽略重複的欄位。
-
配置樣本
添加
aaa2欄位和aaa3欄位,配置樣本如下:-
原始日誌
"aaa1":"value1" -
Logtail外掛程式處理配置 :添加兩個欄位,
aaa2值為value2,aaa3值為value3。 -
處理結果
"aaa1":"value1" "aaa2":"value2" "aaa3":"value3"
-
JSON配置方式
-
參數說明
配置
type為processor_add_fields,detail說明如下表所示。參數
類型
是否必選
說明
Fields
Map
是
待添加的欄位名和欄位值。索引值對格式,支援添加多個。
IgnoreIfExist
Boolean
否
存在相同的欄位名時,是否忽略重複的欄位。
-
true:忽略。
-
false(預設值):不忽略。
-
-
配置樣本
添加aaa2欄位和aaa3欄位,配置樣本如下:
-
原始日誌
"aaa1":"value1" -
Logtail外掛程式處理配置
{ "processors":[ { "type":"processor_add_fields", "detail": { "Fields": { "aaa2": "value2", "aaa3": "value3" } } } ] } -
處理結果
"aaa1":"value1" "aaa2":"value2" "aaa3":"value3"
-
丟棄欄位外掛程式
使用processor_drop外掛程式丟棄日誌欄位。此處介紹processor_drop外掛程式的參數說明和配置樣本。
配置說明
Logtail 0.16.28及以上版本支援processor_drop外掛程式。
表單配置方式
-
參數說明
配置處理器類型為丟棄欄位,相關參數說明如下表所示。
參數
說明
丟棄欄位
指定待丟棄的欄位,支援配置多個。
-
配置樣本
丟棄日誌中的
aaa1欄位和aaa2欄位,配置樣本如下:-
原始日誌
"aaa1":"value1" "aaa2":"value2" "aaa3":"value3" -
Logtail外掛程式處理配置 :丟棄
aaa1和aaa2兩個欄位。 -
處理結果
"aaa3":"value3"
-
JSON配置方式
-
參數說明
配置type為processor_drop,detail說明如下表所示。
參數
類型
是否必選
說明
DropKeys
String數組
是
指定待丟棄的欄位,支援配置多個。
-
配置樣本
丟棄日誌中的aaa1欄位和aaa2欄位,配置樣本如下:
-
原始日誌
"aaa1":"value1" "aaa2":"value2" "aaa3":"value3" -
Logtail外掛程式處理配置
{ "processors":[ { "type":"processor_drop", "detail": { "DropKeys": ["aaa1","aaa2"] } } ] } -
處理結果
"aaa3":"value3"
-
重新命名欄位外掛程式
使用processor_rename外掛程式重新命名欄位。此處介紹processor_rename外掛程式的參數說明和配置樣本。
配置說明
Logtail 0.16.28及以上版本支援processor_rename外掛程式。
表單配置方式
-
參數配置
配置處理外掛程式類型為重新命名欄位,相關參數說明如下表所示。
參數
說明
原始欄位
待重新命名的原始欄位。
結果欄位
重新命名後的欄位。
原始欄位缺失報錯
選中該選項後,如果日誌中無您所指定的原始欄位,系統將報錯。
-
配置樣本
將
aaa1欄位重新命名為bbb1,將aaa2欄位重新命名bbb2,配置樣本如下:-
原始日誌
"aaa1":"value1" "aaa2":"value2" "aaa3":"value3" -
Logtail外掛程式處理配置 :將
aaa1重新命名為bbb1,將aaa2重新命名為bbb2。 -
處理結果
"bbb1":"value1" "bbb2":"value2" "aaa3":"value3"
-
JSON配置方式
-
參數配置
配置
type為processor_rename,detail說明如下表所示。參數
類型
是否必選
說明
NoKeyErrorBoolean
否
日誌中無您所指定的原始欄位時,系統是否報錯。
-
true:報錯。
-
false(預設值):不報錯。
SourceKeysString數組
是
待重新命名的原始欄位。
DestKeysString數組
是
重新命名後的欄位。
-
-
配置樣本
將
aaa1欄位重新命名為bbb1,將aaa2欄位重新命名bbb2,配置樣本如下:-
原始日誌
"aaa1":"value1" "aaa2":"value2" "aaa3":"value3" -
Logtail外掛程式處理配置
{ "processors":[ { "type":"processor_rename", "detail": { "SourceKeys": ["aaa1","aaa2"], "DestKeys": ["bbb1","bbb2"], "NoKeyError": true } } ] } -
處理結果
"bbb1":"value1" "bbb2":"value2" "aaa3":"value3"
-
打包欄位外掛程式
使用processor_packjson外掛程式將一個或多個欄位打包為JSON Object格式的欄位。此處介紹processor_packjson外掛程式的參數說明和配置樣本。
配置說明
Logtail 0.16.28及以上版本支援processor_packjson外掛程式。
表單配置方式
-
參數說明
配置處理器類型為打包欄位,相關參數說明如下表所示。
參數
說明
原始欄位
待打包的原始欄位。
結果欄位
打包後的欄位。
保留原始欄位
選中該選項後,解析後的日誌中將保留原始欄位。
原始欄位缺失報錯
選中該選項後,如果原始日誌中無您指定的原始欄位,系統將報錯。
-
配置樣本
將指定的a欄位和b欄位打包成JSON欄位d_key,配置樣本如下:
-
原始日誌
"a":"1" "b":"2" -
Logtail外掛程式處理配置 :原始欄位設定為
a和b,結果欄位設定為d_key。 -
處理結果
"a":"1" "b":"2" "d_key":"{\"a\":\"1\",\"b\":\"2\"}"
-
JSON配置方式
-
參數說明
配置type為processor_packjson,detail說明如下表所示。
參數
類型
是否必選
說明
SourceKeys
String數組
是
待打包的原始欄位。
DestKey
String
否
打包後的欄位。
KeepSource
Boolean
否
解析後的日誌中是否保留原始欄位。
-
true(預設值):保留。
-
false:不保留。
AlarmIfIncomplete
Boolean
否
原始日誌中無您所指定的原始欄位時,系統是否報錯。
-
true(預設值):報錯。
-
false:不報錯。
-
-
配置樣本
將指定的a欄位和b欄位打包成JSON欄位d_key,配置樣本如下:
-
原始日誌
"a":"1" "b":"2" -
Logtail外掛程式處理配置
{ "processors":[ { "type":"processor_packjson", "detail": { "SourceKeys": ["a","b"], "DestKey":"d_key", "KeepSource":true, "AlarmIfEmpty":true } } ] } -
處理結果
"a":"1" "b":"2" "d_key":"{\"a\":\"1\",\"b\":\"2\"}"
-
展開JSON欄位外掛程式
使用processor_json外掛程式展開JSON欄位。此處介紹processor_json外掛程式的參數說明和配置樣本。
配置說明
Logtail 0.16.28及以上版本支援processor_json外掛程式。
表單配置方式
-
參數說明
配置處理器類型為展開JSON欄位,相關參數說明如下表所示。
參數
說明
原始欄位
待展開的原始欄位名。
JSON展開深度
JSON展開的深度。預設值為0,表示不限制。1表示當前層級,以此類推。
JSON展開串連符
JSON展開時的串連符,預設值為底線(_)。
JSON展開欄位首碼
JSON展開時,對欄位名附加的首碼。
展開數組
是否展開數群組類型。Logtail 1.8.0及以上版本支援該參數。
保留原始欄位
選中該選項後,被解析後的日誌中將保留原始欄位。
原始欄位缺失報錯
選中該選項後,如果原始日誌中無您所指定的原始欄位,系統將報錯。
將原始欄位名作為展開欄位名首碼
選中該選項後,系統會將原始欄位名作為所有JSON展開欄位名的首碼。
解析失敗保留原始日誌
選中該選項後,如果解析日誌失敗,系統將保留原始日誌。
-
配置樣本
對
s_key欄位進行JSON展開,並使用j作為首碼,和原始欄位名s_key作為JSON展開後欄位名。配置樣本如下:-
原始日誌(Logtail讀取的檔案路徑)
{"s_key":"{\"k1\":{\"k2\":{\"k3\":{\"k4\":{\"k51\":\"51\",\"k52\":\"52\"},\"k41\":\"41\"}}}}"} -
Logtail外掛程式處理配置
原始欄位設定為
content,開啟無原始欄位報錯,JSON展開深度設定為0(完全展開),展開串連符設定為虛線(-),首碼設定為j,開啟使用原始欄位名作為首碼,不保留原始欄位。 -
處理結果
展開後的日誌包含以下欄位:
j_s_key_k1_k2_k3_k4_k51值為51,j_s_key_k1_k2_k3_k4_k52值為52,j_s_key_k1_k2_k3_k41值為41。原始s_key欄位已被移除。
-
JSON配置方式
-
參數說明
配置
type為processor_json,detail說明如下表所示。參數
類型
是否必選
說明
SourceKey
String
是
待展開的原始欄位名。
NoKeyError
Boolean
否
原始日誌中無您所指定的原始欄位時,系統是否報錯。
-
true(預設值):報錯。
-
false:不報錯。
ExpandDepth
Int
否
JSON展開的深度。預設值為0,表示不限制。1表示當前層級,以此類推。
ExpandConnector
String
否
JSON展開時的串連符,預設值為底線(_)。
Prefix
String
否
JSON展開時,對欄位名附加的首碼。
KeepSource
Boolean
否
被解析後的日誌中是否保留原始欄位。
-
true(預設值):保留。
-
false:不保留。
UseSourceKeyAsPrefix
Boolean
否
是否將原始欄位名作為所有JSON展開欄位名的首碼。
KeepSourceIfParseError
Boolean
否
解析日誌失敗時,是否保留原始日誌。
-
true(預設值):保留。
-
false:不保留。
ExpandArray
Boolean
否
是否展開數群組類型。Logtail 1.8.0及以上版本支援該參數。
-
false(預設值):不展開。
-
true:展開。例如
{"k":["1","2"]}展開為{"k[0]":"1","k[1]":"2"}。
-
-
配置樣本
對
s_key欄位進行JSON展開,並使用j作為首碼,和原始欄位名s_key作為JSON展開後欄位名。配置樣本如下:-
原始日誌(Logtail讀取的檔案路徑)
{"s_key":"{\"k1\":{\"k2\":{\"k3\":{\"k4\":{\"k51\":\"51\",\"k52\":\"52\"},\"k41\":\"41\"}}}}"} -
Logtail外掛程式處理配置
{ "processors":[ { "type":"processor_json", "detail": { "SourceKey": "content", "NoKeyError":true, "ExpandDepth":0, "ExpandConnector":"-", "Prefix":"j", "KeepSource": false, "UseSourceKeyAsPrefix": true } } ] } -
處理結果
展開後的日誌包含以下欄位:
j_s_key_k1_k2_k3_k4_k51值為51,j_s_key_k1_k2_k3_k4_k52值為52,j_s_key_k1_k2_k3_k41值為41。原始s_key欄位已被移除。
-
欄位值對應外掛程式
使用processor_dict_map外掛程式進列欄位值對應。此處介紹processor_dict_map外掛程式的參數說明和配置樣本。
配置說明
表單配置方式
配置處理器類型為欄位值對應處理,相關參數說明如下表所示。
|
參數 |
說明 |
|
原始欄位 |
原始欄位名。 |
|
結果欄位 |
映射後的結果欄位名。 |
|
映射字典 |
映射字典。設定鍵和值,將鍵映射到值上。 映射字典較小時,可直接通過此參數完成設定。不需要提供本地的CSV字典檔案。 重要
當您設定了本地字典後,映射字典配置不生效。 |
|
本地字典 |
CSV格式的字典檔案。該CSV檔案的分隔字元為半形逗號(,),欄位參考資料表示為半形引號(")。 |
|
進階參數>處理原始欄位缺失 |
選中該選項後,當原始日誌中缺失目標欄位時,將處理缺失欄位,即按照結果欄位填儲值中的值進行填充。 |
|
進階參數>映射字典最大大小 |
映射字典的最大大小。預設值為1000,即最多可儲存1000條映射規則。 如果要限制外掛程式對伺服器記憶體的佔用,可調小該值。 |
|
進階參數>原Tlog方法 |
當映射後的欄位在原始日誌中已存在時的處理方式。
|
JSON配置方式
配置type為processor_dict_map,detail說明如下表所示。
|
參數 |
類型 |
是否必選 |
說明 |
|
SourceKey |
String |
是 |
原始欄位名。 |
|
MapDict |
Map |
否 |
映射字典。 映射字典較小時,可直接通過此參數完成設定。不需要提供本地的CSV字典檔案。 重要
當您設定了DictFilePath參數後,MapDict參數中的配置不生效。 |
|
DictFilePath |
String |
否 |
CSV格式的字典檔案。該CSV檔案的分隔字元為半形逗號(,),欄位參考資料表示為半形引號(")。 |
|
DestKey |
String |
否 |
映射後的欄位名。 |
|
HandleMissing |
Boolean |
否 |
當原始日誌中缺失目標欄位時,系統是否處理。
|
|
Missing |
String |
否 |
處理原始日誌中缺失的目標欄位時,設定對應的填儲值。預設值為 當配置HandleMissing為true時,該參數配置生效。 |
|
MaxDictSize |
Int |
否 |
映射字典的最大大小。預設值為1000,即最多可儲存1000條映射規則。 如果要限制外掛程式對伺服器記憶體的佔用,可調小該值。 |
|
Mode |
String |
否 |
當映射後的欄位在原始日誌中已存在時的處理方式。
|
字串替換
使用processor_string_replace外掛程式,實現文本日誌的全文替換、正則提取替換或去除轉義符。
配置說明
Logtail 1.6.0及以上版本支援processor_string_replace外掛程式。
表單配置方式
配置處理器類型為字串替換,相關參數說明如下表所示。
|
參數 |
說明 |
|
原始欄位 |
原始欄位名。 |
|
匹配方式 |
指定匹配方式。可選值:
|
|
匹配內容 |
輸入匹配的內容。
|
|
替換內容 |
用於替換的字串。
|
|
結果欄位 |
為替換後的內容指定新欄位。 |
JSON配置方式
配置type為processor_string_replace,detail說明如下表所示。
|
參數 |
類型 |
是否必選 |
說明 |
|
|
String |
是 |
原始欄位名。 |
|
|
String |
是 |
指定匹配方式。可選值:
|
|
|
String |
否 |
輸入匹配內容。
|
|
|
String |
否 |
用於替換的字串,預設值為""。
|
|
|
String |
否 |
為替換後的內容指定新欄位,預設不新增欄位。 |
配置樣本
通過字串匹配方式進行替換
通過字串匹配方式進行替換,將content欄位值中的Error:替換為空白字串。
表單配置方式
-
原始日誌如下:
"content": "2023-05-20 10:01:23 Error: Unable to connect to database." -
Logtail外掛程式處理配置:匹配方式選擇字串匹配,原始欄位設定為
content,匹配內容設定為Error:,替換內容為空白。 -
處理結果:
"content": "2023-05-20 10:01:23 Unable to connect to database."
JSON配置方式
-
原始日誌:
"content": "2023-05-20 10:01:23 Error: Unable to connect to database." -
Logtail外掛程式處理配置:
{ "processors":[ { "type":"processor_string_replace", "detail": { "SourceKey": "content", "Method": "const", "Match": "Error: ", "ReplaceString": "" } } ] } -
處理結果:
"content": "2023-05-20 10:01:23 Unable to connect to database.",
通過Regex方式進行替換
通過Regex方式進行替換,將content欄位值中與Regex\\u\w+\[\d{1,3};*\d{1,3}m|N/A匹配的字串替換為空白字串。
表單配置方式
-
原始日誌:
"content": "2022-09-16 09:03:31.013 \u001b[32mINFO \u001b[0;39m \u001b[34m[TID: N/A]\u001b[0;39m [\u001b[35mThread-30\u001b[0;39m] \u001b[36mc.s.govern.polygonsync.job.BlockTask\u001b[0;39m : 區塊採集------結束------\r" -
Logtail外掛程式處理配置:匹配方式選擇Regex匹配,原始欄位設定為
content,匹配內容設定為\\u\w+\[\d{1,3};*\d{1,3}m|N/A,替換內容為空白。 -
處理結果:
"content": "2022-09-16 09:03:31.013 INFO [TID: ] [Thread-30] c.s.govern.polygonsync.job.BlockTask : 區塊採集------結束------\r",
JSON配置方式
-
原始日誌:
"content": "2022-09-16 09:03:31.013 \u001b[32mINFO \u001b[0;39m \u001b[34m[TID: N/A]\u001b[0;39m [\u001b[35mThread-30\u001b[0;39m] \u001b[36mc.s.govern.polygonsync.job.BlockTask\u001b[0;39m : 區塊採集------結束------\r" -
Logtail外掛程式處理配置:
{ "processors":[ { "type":"processor_string_replace", "detail": { "SourceKey": "content", "Method": "regex", "Match": "\\\\u\\w+\\[\\d{1,3};*\\d{1,3}m|N/A", "ReplaceString": "" } } ] } -
處理結果:
"content": "2022-09-16 09:03:31.013 INFO [TID: ] [Thread-30] c.s.govern.polygonsync.job.BlockTask : 區塊採集------結束------\r",
通過正則分組方式進行替換
通過正則分組方式進行替換,將content欄位值中的16替換為*/24,並輸出到新欄位new_ip中。
正則分組替換時,替換內容中不能存在{},只能使用$1、$2 等形式。
表單配置方式
-
原始日誌:
"content": "10.10.239.16" -
Logtail外掛程式處理配置:匹配方式選擇Regex匹配,原始欄位設定為
content,匹配內容設定為(\d.*\.)\d+,替換內容設定為$1*/24,結果欄位設定為new_ip。 -
處理結果:
"content": "10.10.239.16", "new_ip": "10.10.239.*/24",
JSON配置方式
-
原始日誌:
"content": "10.10.239.16" -
Logtail外掛程式處理配置:
{ "processors":[ { "type":"processor_string_replace", "detail": { "SourceKey": "content", "Method": "regex", "Match": "(\\d.*\\.)\\d+", "ReplaceString": "$1*/24", "DestKey": "new_ip" } } ] } -
處理結果:
"content": "10.10.239.16", "new_ip": "10.10.239.*/24",
刪除逸出字元
表單配置方式
-
原始日誌:
"content": "{\\x22UNAME\\x22:\\x22\\x22,\\x22GID\\x22:\\x22\\x22,\\x22PAID\\x22:\\x22\\x22,\\x22UUID\\x22:\\x22\\x22,\\x22STARTTIME\\x22:\\x22\\x22,\\x22ENDTIME\\x22:\\x22\\x22,\\x22UID\\x22:\\x222154212790\\x22,\\x22page_num\\x22:1,\\x22page_size\\x22:10}" -
Logtail外掛程式處理配置:匹配方式選擇去除轉義符,原始欄位設定為
content。 -
處理結果:
"content": "{\"UNAME\":\"\",\"GID\":\"\",\"PAID\":\"\",\"UUID\":\"\",\"STARTTIME\":\"\",\"ENDTIME\":\"\",\"UID\":\"2154212790\",\"page_num\":1,\"page_size\":10}",
JSON配置方式
-
原始日誌:
"content": "{\\x22UNAME\\x22:\\x22\\x22,\\x22GID\\x22:\\x22\\x22,\\x22PAID\\x22:\\x22\\x22,\\x22UUID\\x22:\\x22\\x22,\\x22STARTTIME\\x22:\\x22\\x22,\\x22ENDTIME\\x22:\\x22\\x22,\\x22UID\\x22:\\x222154212790\\x22,\\x22page_num\\x22:1,\\x22page_size\\x22:10}" -
Logtail外掛程式處理配置:
{ "processors":[ { "type":"processor_string_replace", "detail": { "SourceKey": "content", "Method": "unquote" } } ] } -
處理結果:
"content": "{\"UNAME\":\"\",\"GID\":\"\",\"PAID\":\"\",\"UUID\":\"\",\"STARTTIME\":\"\",\"ENDTIME\":\"\",\"UID\":\"2154212790\",\"page_num\":1,\"page_size\":10}",
相關文檔
-
通過API介面配置Logtail流水線:
-
通過控制台配置處理外掛程式: