最近更新时间:2023-04-26 15:40:39
函数介绍
通过分隔符提取目标字段中的键值对
语法描述
kv_delimit(key1,key2..., pair_sep="\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")
参数说明
参数名称 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|
key | string | 是 | 指定的字段名称 |
pair_sep | string | 否 | 用于分隔键值对的正则字符集,注意是字符集非正则表达式,如:abc会分别匹配a |
kv_sep | string | 否 | 用于分隔键和值的字符串。默认= |
prefix | string | 否 | 给提取的字段名称添加前缀。 |
suffix | string | 否 | 给提取的字段名称添加后缀。 |
mode | string | 否 | 字段覆盖模式,默认fill-auto,详见文末字段覆盖模式类型 |
示例1
从content字段提取键值对
原始日志
{"content":"k1=v1 k2=v2"}
加工规则
kv_delimit("content")
加工结果
{"content":"k1=v1 k2=v2","k1":"v1","k2":"v2"}
示例2
从content字段提取键值对,并为提取字段添加前后缀。
原始日志
{"content":"k1=v1 k2=v2"}
加工规则
kv_delimit("content",prefix="p_",suffix="_s")
加工结果
{"content":"k1=v1 k2=v2","p_k1_s":"v1","p_k2_s":"v2"}
示例3
根据自定义分隔符,从content字段提取键值对。
原始日志
{"content":"k1:v1+k2:v2?k3:v3*k4:v4/k5:v5\\k6:v6.k7:v7 k8:v8"}
加工规则
kv_delimit("content",pair_sep="?+\-*/\s.",kv_sep=":")
加工结果
{"content":"k1:v1+k2:v2?k3:v3*k4:v4/k5:v5\k6:v6.k7:v7 k8:v8","k1":"v1","k2":"v2","k3":"v3","k4":"v4","k5":"v5","k6":"v6","k7":"v7","k8":"v8"}
函数介绍
对指定字段的json对象进行展开、jmes提取或jmes提取后再展开。指定字段值必须为json对象。
语法描述
json(key, expand=true, depth=100, prefix="", suffix="", fmt="simple", sep=".",
expand_array=True, fmt_array="{parent_rlist[0]}_{index}", include_node="",
exclude_node="", include_path="", exclude_path="",jmes="",
output="", jmes_ignore_none=true, mode='fill-auto'
)
参数说明
参数名称 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|
key | string | 是 | 指定的字段名称 |
expand | bool | 否 | 是否将字段展开。jmes为空时,默认为true,表示展开,否则为false。 |
depth | number | 否 | 字段展开深度。取值范围1-500。默认100 |
prefix | string | 否 | 展开字段名前缀 |
suffix | string | 否 | 展开字段名后缀 |
fmt | string | 否 | 展开字段格式,默认simple。simple:{prefix}{current}{suffix} full:{parent_list_str}{sep}{prefix}{current}{suffix} parent:{parent}{sep}{prefix}{current}{suffix} root:{parent_list[0]}{sep}{prefix}{current}{suffix} |
sep | string | 否 | 分级节点间的分隔符。默认“.” |
expand_array | bool | 否 | 是否展开数组,true表示展开。默认true |
fmt_array | string | 否 | 数组展开格式。可以自定义格式化占位符,最多五个,默认{parent_rlist[0]}_{index}。parrent_list;parent_rlist;index;sep;prefix;suffix |
include_node | string | 否 | 包含的节点的正则表达式 |
exclude_node | string | 否 | 排除的节点的正则表达式 |
include_path | string | 否 | 包含路径的正则表达式 |
exclude_path | string | 否 | 排除路径的正则表达式 |
jmes | string | 否 | 从原日志中提取数据的jmes |
output | string | 否 | jmes提取内容输出的字段名 |
jmes_ignore_none | bool | 否 | jmes未提取到值时是否忽略,true表示忽略,否则输出一个空字符串。默认true |
mode | string | 否 | 字段的覆盖模式。默认fill-auto,详见文末字段覆盖模式类型 |
补充说明:
include_path和exclude_path过滤。
将字段展开后,再对其“full”格式化字段名称从开头进行正则匹配(系统会在用户输入的正则表达式前面加上“^”),分隔符为“.”(不影响最终输出格式和分隔符)。
如果展开后“full”格式的字段名称为:user.address.city
include_path=“user” //可以匹配
include_path=“user.add” //可以匹配
include_path=“address.city” //无法匹配
示例1
为展开字段增加前后缀
原始日志
{"content":{"k1":"v1","k2":"v2"}}
加工规则
json("content",prefix="p_",suffix="_s")
加工结果
{"content":{"k1":"v1","k2":"v2"},"p_k1_s":"v1","p_k2_s":"v2"}
示例2
默认格式展开
原始日志
{"content":{"k1":"v1","k2":["10","20"]}}
加工规则
json("content")
加工结果
{"content":{"k1":"v1","k2":["10","20"]},"k1":"v1","k2_0":"10","k2_1":"20"}
示例3
将fmt设置为full展开
原始日志
{"content":{"k1":"v1","k2":["10","20"]}}
加工规则
json("content",fmt="full")
加工结果
{"content":{"k1":"v1","k2":["10","20"]},"content.k1":"v1","content.k2.k2_0":"10","content.k2.k2_1":"20"}
示例4
将fmt设置为parent展开
原始日志
{"content":{"k1":"v1","k2":["10","20"]}}
加工规则
json("content",fmt="parent")
加工结果
{"content":{"k1":"v1","k2":["10","20"]},"content.k1":"v1","k2.k2_0":"10","k2.k2_1":"20"}
示例5
将fmt设置为root展开
原始日志
{"content":{"k1":"v1","k2":["10","20"]}}
加工规则
json("content",fmt="root")
加工结果
{"content":{"k1":"v1","k2":["10","20"]},"content.k1":"v1","content.k2_0":"10","content.k2_1":"20"}
示例6
自定义fmt_array
原始日志
{"content":[{"name":"ks","age":23},{"name":"gt","age":38}]}
加工规则
json("content",fmt="parent",fmt_array="{parent_list[0]}--{index}")
加工结果
{"content--0.age":23,"content--0.name":"ks","content--1.age":38,"content--1.name":"gt","content":[{"age":23,"name":"ks"},{"age":38,"name":"gt"}]}
示例7
使用jmes
原始日志
{"content":{"k1":"v1","k2":{"k3":"v3","k4":{"k5":"v5","k6":["one","tow"]}}}}
加工规则
json("content",jmes="k2.k3",output="jmes_content")
加工结果
{"jmes_content":"v3","content":{"k1":"v1","k2":{"k3":"v3","k4":{"k5":"v5","k6":["one","tow"]}}}}
示例8
使用include_path过滤
原始日志
{"content":{"k1":{"k1-1":"k1-1.v"},"k2":{"k2-1":"k2-1.v"}}}
加工规则
json("content",fmt="full",include_path="content.k1")
加工结果
{"content":{"k1":{"k1-1":"k1-1.v"},"k2":{"k2-1":"k2-1.v"}},"content.k1.k1-1":"k1-1.v"}
函数介绍
通过quote提取字段中的键值对信息。
语法描述
kv(key1,key2,..., sep="=", quote='"', escape=false, prefix="", suffix="", mode="fill-auto")
参数说明
参数名称 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|
key | string | 是 | 字段名称 |
sep | string | 否 | 键与值的分隔符,仅单字符。默认“=” |
quote | string | 否 | 用于包裹值的字符。如果提取对象中不包含引用符,则只提取中文、字母、数字以及符号:_-.%~。默认为" |
escape | bool | 否 | 是否提取反转字符的值。false表示不提取。例:key=“abc"def”,默认提取值为abc\,当设置escape=true时,提取abc"def。默认为false |
prefix | string | 否 | 提取字段名前缀。 |
suffix | string | 否 | 提取字段名后缀。 |
mode | string | 否 | 字段覆盖模式,默认fill-auto,详见文末字段覆盖模式类型 |
示例1
默认参数提取url键值对信息
原始日志
{"content":"https://passport.ksyun.com/?k1=v1&k2=v2&k3="}
加工规则
kv("content")
加工结果
{"content":"https://passport.ksyun.com/?k1=v1&k2=v2&k3=","k1":"v1","k2":"v2"}
示例2
设置escape为true,提取包裹符中嵌套的包裹符。
原始日志
{"content":"k1:\"v1\\\"abc\", k2:\"v2\", k3: \"v3\""}
#转义前:{"content":"k1:"v1\"abc", k2:"v2", k3:"v3""}
加工规则
kv("content",sep=":",escape=true)
加工结果
{"content":"k1:"v1\"abc",k2:"v2",k3:"v3"","k1":"v1"abc","k2":"v2","k3":"v3"}
函数介绍
通过正则表达式提取值并赋值给指定字段。
语法描述
regex(key,expr,fields_info,mode="fill-auto",pack_json="")
参数说明
参数名称 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|
key | string | 是 | 被提取字段名称 |
expr | string | 否 | 提取指定字段值的正则表达式。 |
fields_info | string/list/map | 当正则表达式中没有设置命名捕获的名称时,必须配置该参数 | 匹配后的目标字段名称。 |
mode | string | 否 | 字段覆盖模式。默认fill-auto,详见文末字段覆盖模式类型 |
pack_json | string | 否 | 将正则表达式提取的所有结果放入该参数指定的字段中,默认不打包。 |
示例1
获取第一个匹配的结果
原始日志
{"content":"123abc456"}
加工规则
regex("content","\d+","count")
加工结果
{"content":"123abc456","count":"123"}
示例2
获取多个匹配结果
原始日志
{"content":"123abc456"}
加工规则
regex("content","\d+",["count","size"])
加工结果
{"content":"123abc456","count":"123","size":"456"}
示例3
使用正则表达式捕获组,并使用map动态命名键和值
原始日志
{"content":"abc:123,edf:456"}
加工规则
regex("content","([a-z]+):(\d+)",{"key_\1":"value_\2"})
加工结果
{"content":"abc:123,edf:456","key_abc":"value_123","key_edf":"value_456"}
示例4
使用正则表达式命名捕获组获取字段值。
原始日志
{"content":"abc:456"}
加工规则
regex("content","(?P<key>[a-z]+):(?P<value>\d+)")
加工结果
{"content":"abc:456","key":"abc","value":"456"}
示例5
将提取字段打包放入pack_json设置的字段中。
原始日志
{"content":"abc:456"}
加工规则
regex("content","\d+","count",pack_json="packed")
加工结果
{"content":"abc:456","packed":{"count":"456"}}
参数值 | 说明 |
---|---|
fill | 当目标字段不存在或者值为空时,设置目标字段。 |
fill-auto | 当新值非空,且目标字段不存在或者值为空时,设置目标字段。 |
add | 当目标字段不存在时,设置目标字段。 |
add-auto | 当新值非空,且目标字段不存在时,设置目标字段。 |
overwrite | 强制覆盖写入目标字段。 |
overwrite-auto | 若新值非空,覆盖写入目标字段。 |
纯净模式