文档捉虫大赛:人工智能与机器学习专题> HOT

简介

字段处理函数,就是对日志中的字段进行处理,如下图所示:


v 函数

函数定义

获取字段值,返回对应字符串。

语法描述

v(字段名)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
field
字段名
string
-
-

示例

获取 "message" 字段的值,将它赋值给一个新字段 "new_message"。
原始日志:
{"message": "failed", "status": "500"}
加工规则:
fields_set("new_message", v("message"))
加工结果:
{"message": "failed", "new_message": "failed","status": "500"}

fields_drop 函数

函数定义

根据字段名进行匹配,丢弃匹配到的字段。

语法描述

fields_drop(字段名1, 字段名2, ..., regex=False,nest=False)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
可变参,字段名或字段名的正则表达式
可变参,字段名或字段名的正则表达式
string
-
-
regex
是否启用正则表达式,匹配模式为全匹配
bool
False
-
nest
是否是嵌套字段
bool
False
-

示例

示例1:丢弃字段名为 "field" 的字段。 原始日志:
{"field": "a,b,c", "status": "500"}
加工规则:
fields_drop("field")
加工结果:
{"status":"500"}
示例2:嵌套字段的处理。 原始日志:
{"condition":"{\\"a\\":\\"aaa\\", \\"c\\":\\"ccc\\", \\"e\\":\\"eee\\"}","status":"500"}
加工规则:
//nest=True,表示该字段是嵌套字段,将condition.a和condition.c丢弃后,只剩下condition.e字段。
t_if(if_json(v("condition")), fields_drop("condition.a", "condition.c", nest=True))
加工结果:
{"condition":"{\\"e\\":\\"eee\\"}","status":"500"}
示例3:嵌套字段的处理。 原始日志:
{"App": "thcomm","Message": "{\\"f_httpstatus\\": \\"200\\",\\"f_requestId\\": \\"2021-11-09 08:40:17.832\\tINFO\\tservices/http_service.go:361\\tbb20ac02-fcbc-4a56-b1f1-4064853b79da\\",\\"f_url\\": \\"wechat.wecity.qq.com/trpcapi/MbpsPaymentServer/scanCode\\"}"}
加工规则:
//nest=True,表示该字段是嵌套字段,将Message.f_requestId", Message.f_url丢弃后,只剩下字f_httpstatus段。
t_if(if_json(v("Message")), fields_drop("Message.f_requestId", "Message.f_url", nest=True))
加工结果:
{"App":"thcomm","Message":"{\\"f_httpstatus\\":\\"200\\"}"}

fields_keep 函数

函数定义

根据字段名进行匹配,保留匹配到的字段

语法描述

fields_keep(字段名1, 字段名2, ..., regex=False)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
可变参,字段名或字段名的正则表达式
可变参,字段名或字段名的正则表达式
string
-
-
regex
是否启用正则表达式,匹配模式为全匹配
bool
False
-

示例

保存字段名为 "field" 的字段,其余字段丢弃。
原始日志:
{"field": "a,b,c", "status": "500"}
加工规则:
fields_keep("field")
加工结果:
{"field":"a,b,c"}

fields_pack 函数

函数定义

根据正则表达式来匹配字段名,并将匹配到的字段打包到新的字段,新字段值使用 JSON 格式进行组织。

语法描述

fields_pack(目标字段名, include=".*", exclude="", drop_packed=False)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
output
打包后的新字段名称
string
-
-
include
包含字段名称的正则
string
-
-
exclude
排除字段名称的正则
string
-
-
drop_packed
是否删除原有被打包的字段
bool
False
-

示例

原始日志:
{"field_a": "a,b,c","field_b": "abc", "status": "500"}
加工规则:
fields_pack("new_field","field.*", drop_packed=False)
加工结果:
{"new_field":"{\\"field_a\\":\\"a,b,c\\",\\"field_b\\":\\"abc\\"}","field_a":"a,b,c","field_b":"abc","status":"500"}

fields_set 函数

函数定义

用来设置字段值,或者增加新字段。

语法描述

fields_set(字段名1, 字段值1, 字段名2, 字段值2, mode="overwrite")

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
可变参
key、value 交替的参数列表
string
-
-
-
mode
字段覆写模式
string
overwrite
-

示例

示例1:将级别从 “Info” 修改为 “Waring”。 原始日志:
{"级别": "Info"}
加工规则:
fields_set("级别", "Warning")
加工结果:
{"级别", "Warning"}
示例2:新增两个字段,"new"和"new2"。 原始日志:
{"a": "1", "b": "2", "c": "3"}
加工规则:
fields_set("new", v("b"), "new2", v("c"))
加工结果:
{"a":"1","b":"2","c":"3","new":"2","new2":"3"}

fields_rename 函数

函数定义

字段重命名。

语法描述

fields_rename(字段名1, 新字段名1, 字段名2, 新字段名2, regex=False)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
可变参
旧字段名、新字段名交替的参数列表
string
-
-
-
regex
字段名是否启用正则匹配,启用使用正则匹配旧字段名,不启用则是相等匹配
bool
False
-

示例

原始日志:
{"regieeen": "bj", "status": "500"}
加工规则:
fields_rename("reg.*", "region", regex=True)
加工结果:
{"region":"bj","status":"500"}

has_field 函数

函数定义

字段存在时,返回 True,否则返回 False。

语法描述

has_field(字段名)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
field
字段名
string
-
-

示例

原始日志:
{"regiooon": "bj", "status": "500"}
加工规则:
t_if(has_field("regiooon"), fields_rename("regiooon", "region"))
加工结果:
{"region":"bj","status":"500"}

not_has_field 函数

函数定义

字段不存在时,返回 True,否则返回 False。

语法描述

not_has_field(字段名)

参数说明

参数名称
参数描述
参数类型
是否必须
参数默认值
参数取值范围
field
字段名
string
-
-

示例

原始日志:
{"status": "500"}
加工规则:
t_if(not_has_field("message"), fields_set("no_message", True))
加工结果:
{"no_message":"TRUE","status":"500"}