日志服务 字段处理函数

这篇说说腾讯云日志服务中字段处理函数的使用方法,涵盖字段取值、增删改查等操作,包括v、fields_drop、fields_keep、fields_set等函数定义、参数说明及示例。 字段取值:v函数获取指定字段值并返回字符串。 字段删除:fields_drop按字段名匹配删除,支持正则与嵌套字段。 字段保留与设置:fields_keep保留匹配字段,fields_set设置或新增字段值。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

一、简介

字段处理函数,日志中的字段进行处理,包括取值、增删查改等。

三、函数定义

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

四、语法描述

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(字段名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(字段名1, 字段名2, …, regex=False)

十五、参数说明

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

十六、示例

保存字段名为 "field" 的字段,其余字段丢弃。

原始日志:

{"field": "a,b,c", "status": "500"}

加工规则:

fields_keep("field")

加工结果:

{"field":"a,b,c"}

十八、函数定义

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

十九、语法描述

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

20、参数说明

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

21、示例

原始日志:

{"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"}

23、函数定义

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

24、语法描述

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

25、参数说明

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

26、示例

·示例1:将级别从 “Info” 修改为 “Warning”。

原始日志:

{"级别": "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"}

28、函数定义

字段重命名。

29、语法描述

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

30、参数说明

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

31、示例

原始日志:

{"regieeen": "bj", "status": "500"}

加工规则:

fields_rename("reg.*", "region", regex=True)

加工结果:

{"region":"bj","status":"500"}

33、函数定义

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

34、语法描述

has_field(字段名)

35、参数说明

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

36、示例

原始日志:

{"regiooon": "bj", "status": "500"}

加工规则:

t_if(has_field("regiooon"), fields_rename("regiooon", "region"))

加工结果:

{"region":"bj","status":"500"}

38、函数定义

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

39、语法描述

not_has_field(字段名)

40、参数说明

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

41、示例

原始日志:

{"status": "500"}

加工规则:

t_if(not_has_field("message"), fields_set("no_message", true))

加工结果:

{"no_message":"true","status":"500"}

43、函数定义

为动态生成的主题打标签。从日志字段中提取标签值,并将这些标签值作为动态生成的主题的标签。

注意:例如这条语句: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"))) 使用了 tag_static 静态标签和 tag_dynamic 动态标签。

44、语法描述

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

45、参数说明

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

46、示例

原始日志:

[{"pd": "CDN", "team": "test"},{"pd": "CLS", "team": "product"},{"pd": "COS", "team": "sales"},{"pd": "CLS", "team": "test"},{"pd": "CKafka", "team": "product"}]

注意:说明:

注意:同一个日志主题,相同的标签名,仅最早的标签值生效。该示例中,名称为 CLS 的日志主题,team:product 是最早的标签值,该标签生效,后续的 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_static 1对,动态标签 tag_dynamic 2对,因此都生成了3对标签。

赞 (0)
上一篇 4天前
下一篇 4天前