有奖捉虫:办公协同&微信生态&物联网文档专题 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"}

extract_tag 函数

函数定义

为动态生成的主题打标签。从日志字段中提取标签值,并将这些标签值作为动态生成主题的标签。
注意:
其中静态标签和动态标签的总数不超过10对。
例如这条语句
log_auto_output(v("pd"),"我的日志集",index_options="content_index", period=3,tag_static="Ckafka:test_env,developer:MikeWang",tag_dynamic=extract_tag("pd",v("pd"),"team", v("team")))

语法描述

extract_tag(标签名1,标签值1,标签名2,标签值2....)

参数说明

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

示例

原始日志:
[
{"pd": "CDN", "team": "test"},
{"pd": "CLS", "team": "product"},
{"pd": "COS", "team": "sales"},
{"pd": "CLS", "team": "test"},
{"pd": "CKafka", "team": "product"}
]
说明:
同一个日志主题,相同的标签名,仅最早的标签值生效,该示例中,名称为CLS的日志主题,team:produc是最早的标签值,该标签生效,后续的team:test 标签不生效,因为它们的标签名相同。
加工规则:
log_auto_output(v("pd"),"我的日志集",index_options="content_index", period=3,tag_static="Ckafka:test_env",tag_dynamic=extract_tag("pd",v("pd"),"team", v("team")))
加工结果:
生成了名为COS,CKafka,CLS ,CDN的日志主题,并为这几个日志主题打标签。语句中有静态标签tag_static1对,动态标签2对,因此都生成了3对标签。