华为云用户手册

  • e_kv 通过quote提取多个源字段中的键值对信息。 函数格式 e_kv(源字段或源字段列表, sep="=", quote='"', escape=false, prefix="", suffix="", mode="fill-auto") 参数说明 参数名称 参数类型 是否必填 说明 源字段或源字段列表 字符串或字符串列表 是 字段名或多个字段名的列表。 sep String 否 关键字与值的正则表达式的分隔符串,默认为=,不限于单个字符。 说明 可以使用非捕获分组,但不能使用捕获分组。 quote String 否 引用符,用于包裹值的字符。默认为"。 说明 提取的动态键值对的值一般需要quote来包括,例如:a="abc",b="xyz"如果提取对象中不包含,则只提取如下字符集的值:中文字母数字_-.%~。例如a=中文ab12_-.%~|abc b=123可以提取a: 中文ab12_-.%~,b: 123。 escape Boolean 否 是否自动提取反转字符的值。默认为false表示否。例如key="abc\"xyz"默认提取字段key的值为abc\,设置escape=true时,提取的值为abc"xyz。 prefix String 否 给提取的字段名添加前缀。 suffix String 否 给提取的字段名添加后缀。 mode String 否 字段的覆盖模式。默认为fill-auto。 返回结果 返回附带新字段值的日志。 函数示例 示例1:使用默认分隔符=提取键值对信息。 测试数据 { "http_refer": "https://video.developer.aadoc.com/s?q=asd&a=1&b=2" } 如果测试数据为request_uri: a1=1&a2=&a3=3,a2值为空,则使用e_kv()函数无法提取出a2。您可以使用e_regex()函数进行提取,例如e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"},mode="overwrite")。 加工规则 e_kv("http_refer") 加工结果 http_refer: https://video.developer.aadoc.com/s?q=asd&a=1&b=2 q: asd a: 1 b: 2 示例2:给字段名增加前缀和后缀。 测试数据 { "http_refer": "https://video.developer.aadoc.com/s?q=asd&a=1&b=2" } 加工规则 e_kv( "http_refer", sep="=", quote='"', escape=false, prefix="data_", suffix="_end", mode="fill-auto", ) 加工结果 http_refer: https://video.developer.aadoc.com/s?q=asd&a=1&b=2 data_q_end: asd data_a_end: 1 data_b_end: 2 示例3:提取字段content2中的键值对信息,使用escape参数提取反转字符的值。 测试数据 { "content2": "k1:\"v1\\"abc\", k2:\"v2\", k3: \"v3\"" } 加工规则 e_kv("content2", sep=":", escape=true) 加工结果 content2: k1:"v1\"abc", k2:"v2", k3: "v3" k1: v1"abc k2: v2 k3: v3 更多参考 支持和其他函数组合使用。
  • e_csv、e_psv、e_tsv 使用自定义的分隔符与预定义的字段名,从特定字段中提取多个字段。 e_csv:默认分隔符为半角逗号(,)。 e_psv:默认分隔符为竖线(|)。 e_tsv:默认分隔符为\t。 函数格式 e_csv(源字段名, 目标字段列表, sep=",", quote='"', restrict=true, mode="fill-auto") e_psv(源字段名, 目标字段列表, sep="|", quote='"', restrict=true, mode="fill-auto") e_tsv(源字段名, 目标字段列表, sep="\t", quote='"', restrict=true, mode="fill-auto") 参数说明 参数名称 参数类型 是否必填 说明 源字段名 任意 是 源字段名。如果字段不存在,则不进行任何操作。 目标字段列表 任意 是 字段值经过分隔符分隔后的每个值对应的字段名。可以是字符串的列表,例如:["error", "message", "result"]。 当字段名中不包含逗号时,也可以直接用逗号作为分隔字符,例如:"error, message, result"。 sep String 否 分隔符,只能是单个字符。 quote String 否 引用符,用于包裹值的字符。当值包含分隔符时需要使用。 restrict Boolean 否 是否采用严格模式,默认为false表示非严格模式。当分隔值的个数与目标字段列表数不一致时: 严格模式下不进行任何操作。 非严格模式下对前几个可以配对的字段进行赋值。 mode String 否 字段的覆盖模式。默认为fill-auto。 返回结果 返回附带新字段值的日志。 函数示例 以e_csv为例,e_psv和e_tsv功能类似。 测试数据 { "content": "192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aadoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aadoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,-" } 加工规则 e_csv("content", "remote_addr, time_local,host,request,status,request_time,body_bytes_sent,upstream_addr,upstream_status, upstream_response_time,http_referer,http_x_forwarded_for,http_user_agent,session_id,guid") 加工结果 content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aadoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aadoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36,-,- body_bytes_sent: 6404 guid: - host: example.aadoc.com http_referer: https://image.developer.aadoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei http_user_agent: Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 http_x_forwarded_for: - remote_addr: 192.168.0.100 request: GET /zf/11874.html HTTP/1.1 request_time: 0.077 session_id: - status: 200 time_local: 10/Jun/2019:11:32:16 +0800 topic: syslog-forwarder upstream_addr: 192.168.0.100:800 1upstream_response_time: 0.060 upstream_status: 200 更多参考 支持和其他函数组合使用。
  • e_json 对特定字段中的JSON对象进行JSON操作,包括JSON展开、JMES提取或者JMES提取后再展开。 函数格式 e_json(key, expand=None, depth=100, prefix="__", suffix="__", fmt="simple", sep=".", expand_array=true, fmt_array="{parent}_{index}", include_node=r"[\u4e00-\u9fa5\u0800-\u4e00a-zA-Z][\w\-\.]*", exclude_node="", include_path="", exclude_path="", jmes="", output="", jmes_ignore_none=false, mode='fill-auto' ) 参数说明 参数名称 参数类型 是否必填 说明 key String 是 源字段名。如果字段不存在,则不进行任何操作。 expand Boolean 否 是否将字段展开。 没有配置jmes参数时,则默认为true,表示展开。 配置jmes参数时,则默认为false,表示不展开。 depth Number 否 字段展开的深度。取值范围为1~2000,1表示只展开第一层,默认为100层。 prefix String 否 展开时添加为字段名的前缀。 suffix String 否 展开时添加为字段名的后缀。 fmt String 否 格式化方式。取值: simple(默认值):表示将节点名作为字段名。展示形式为{prefix}{current}{suffix}。 full:表示将父节点与当前节点合并作为字段名。展示形式为{parent_list_str}{sep}{prefix}{current}{suffix}。分隔符是由sep参数指定,默认为.。 parent:表示用完整的路径作为字段名。展示形式为{parent}{sep}{prefix}{current}{suffix}。分隔符是由sep参数指定,默认为.。 root:表示将根节点与当前节点合并作为字段名。展示形式为{parent_list[0]}{sep}{prefix}{current}{suffix}。分隔符由sep参数指定,默认为.。 sep String 否 父子节点格式化的分隔符。当fmt取值为full、parent或root时需要设置。默认为.。 expand_array Boolean 否 是否将数组展开。默认为true表示展开数组。 fmt_array String 否 数组展开的格式化方式,格式为{parent_rlist[0]}_{index}。也可以使用最多五个占位符自定义格式化字符串:parent_list,current,sep,prefix,suffix。 include_node String/ Number 否 节点允许名单,表示过滤时包含的节点名称。默认只有中文、数字、字母和_.-的节点才会被自动展开。 exclude_node String 否 节点限制名单,表示过滤时排除的节点名称。 include_path String 否 节点允许名单,表示过滤时包含的节点路径。 exclude_path String 否 节点限制名单,表示过滤时排除的节点路径。 jmes String 否 将字段值转化为JSON对象并通过JMES提取特定值。 output String 否 通过JMES提取特定值时输出的字段名。 jmes_ignore_none Boolean 否 当JMES提取不到值时是否忽略。默认为true表示忽略,否则输出一个空字符串。 mode String 否 字段的覆盖模式。默认为fill-auto。 JSON展开过滤 如果设置了节点允许名单,则内容必须包含在节点允许名单中然后才会在结果中出现。节点允许名单正则示例:e_json("json_data_filed", ...., include_node=r'key\d+')。 如果设置了节点限制名单,则内容必须包含在节点限制名单中然后才不会在结果中出现。节点限制名单正则示例:e_json("json_data_filed", ...., exclude_node=r'key\d+')。 展开节点路径:正则include_path 与 exclue_path从路径开头匹配,匹配路径是以.分隔。 JMES过滤 使用JMES选择、计算。 选择特定JSON路径下的元素属性列表:e_json(..., jmes="cve.vendors[*].product",output="product") 用逗号拼接特定JSON路径下的元素属性:e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors") 计算特定JSON路径下元素的最大属性值:e_json(..., jmes="max(words[*].score)",output="hot_word") 当特定路径不存在或为空时,返回一个空字符串:e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=false) parent_list和parent_rlist,以如下示例说明。 测试数据: { "data": { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} } parent_list是将父节点从左到右排列。 e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}') 得到的日志: data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} data-k2#k3:200 data-k2#k5:300 parent_rlist是将父节点从右到左排列。 e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}') 得到的日志: data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} k2-data#k3:200 k4-k2#k5:300 返回结果 返回附带新字段值的日志。 函数示例 示例1:字段展开操作。 测试数据 { "data": {"k1": 100, "k2": 200} } 加工规则 e_json("data",depth=1) 加工结果 data: {"k1": 100, "k2": 200} k1: 100 k2: 200 示例2:给字段名添加前缀和后缀。 测试数据 { "data": {"k1": 100, "k2": 200} } 加工规则 e_json("data", prefix="data_", suffix="_end") 加工结果 data: {"k1": 100, "k2": 200} data_k1_end: 100 data_k2_end: 200 示例3:将字段按照不同格式展开。 测试数据 { "data": {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } } fmt=full格式 e_json("data", fmt='full') data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k2.k3: 200 data.k2.k4.k5: 300 fmt=parent格式 e_json("data", fmt='parent') data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 k2.k3: 200 k4.k5: 3000 fmt=root格式 e_json("data", fmt='root') data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k3: 200 data.k5: 300 示例4:使用指定分隔符、字段名前缀和字段名后缀提取JSON 测试数据 { "data": {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } } 加工规则 e_json("data", fmt='parent', sep="@", prefix="__", suffix="__") 加工结果 data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data@__k1__:100 k2@__k3__:200 k4@__k5__:300 示例5:指定fmt_array参数,按照数组方式提取JSON。 测试数据 { "people": [{"name": "xm", "gender": "boy"}, {"name": "xz", "gender": "boy"}, {"name": "xt", "gender": "girl"}] } 加工规则 e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}") 加工结果 people: [{"name": "xm", "gender": "boy"}, {"name": "xz", "gender": "boy"}, {"name": "xt", "gender": "girl"}] people-0.name: xm people-0.gender: boy people-1.name: xz people-1.gender: boy people-2.name: xt people-2.gender: girl 示例6:使用JMES提取JSON对象。 测试数据 { "data": { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}} } 加工规则 e_json("data", jmes='foo', output='jmes_output0') e_json("data", jmes='foo.bar', output='jmes_output1') e_json("data", jmes='people[0].last', output='jmes_output2') e_json("data", jmes='people[*].first', output='jmes_output3') 加工结果 data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}} jmes_output0: {"bar": "baz"} jmes_output1: baz jmes_output2: d jmes_output3: ["james", "jacob"] 更多参考 支持和其他函数组合使用。
  • 函数列表 类型 函数 说明 正则提取 e_regex 根据正则表达式提取字段的值并赋值给其他字段。支持和其他函数组合使用。 JSON提取 e_json 对特定字段中的JSON对象进行JSON操作,包括JSON展开、JMES提取或者JMES提取后再展开。支持和其他函数组合使用。 分隔符提取 e_csv、e_psv、e_tsv 使用自定义的分隔符与预定义的字段名,从特定字段中提取多个字段。 e_csv:默认分隔符为半角逗号(,)。 e_psv:默认分隔符为竖线(|)。 e_tsv:默认分隔符为\t。 支持和其他函数组合使用。 KV模式提取 e_kv 通过quote提取多个源字段中的键值对信息。支持和其他函数组合使用。 e_kv_delimit 通过分隔符提取源字段中的键值对信息。
  • e_search_table_map 对某列(查询字符串)以及其匹配的值的表格数据进行映射。 函数格式 e_search_table_map(data, inpt, output_fields, multi_match=false, multi_join=" ", missing=None, mode="fill-auto") 参数说明 参数名称 数据类型 是否必填 说明 data Table 是 映射关系的表格,表格某一列必须是查询字符串。 inpt String 是 表格中用于匹配搜索的字段名。 output_fields String,String List或Tuple List 是 表格中映射出的字段,可以是字符串、列表或者其名称映射元组的列表。 multi_match Boolean 否 是否允许匹配多个字段。默认为false表示不匹配多个字段,会返回匹配到的第一个字段值。支持使用multi_join来拼接多个匹配的值。 multi_join String 否 匹配多个字段时,多值的连接字符串,默认为空格。当multi_match值为true时生效。 missing String 否 无匹配字段时,将该参数的取值赋给输出字段output_fields。默认为None表示不做映射赋值操作。 如果表格中包含默认匹配*,由于*的优先级高于missing,此时missing将不起作用。 mode String 否 字段的覆盖模式。默认为fill-auto。 返回结果 返回查询匹配中后的映射结果。 函数示例 示例1:根据映射关系的表格,将日志中city字段映射出pop和province字段。 测试数据 { "data": 123, "city": "sh" } 例如,以下映射关系的表格,其中search列是查询字符串。 search pop province city==nj 800 js city==sh 2000 sh 加工规则 e_search_table_map( tab_parse_csv("search,pop,province\ncity==nj,800,js\ncity==sh,2000,sh"), "search", ["pop", "province"], ) 加工结果 data: 123 city: sh province: sh pop: 2000 示例2:overwrite模式。 测试数据 { "data": 123, "city": "nj", "province":"" } 加工规则 e_search_table_map( tab_parse_csv("search,pop,province\ncity==nj,800,js\ncity==sh,2000,sh"), "search", "province", mode="overwrite", ) 加工结果 pop: 800 data: 123 city: nj province: js 示例3:无匹配时目标字段的值由missing指定。 测试数据 { "data": 123, "city": "wh", "province":"" } 加工规则 e_search_table_map( tab_parse_csv("search,pop,province\ncity==nj,800,\ncity==sh,2000,sh"), "search", "province", missing="Unknown", ) 加工结果 data: 123 city: wh province: Unknown 示例4:允许匹配多个字段(multi_match模式)。 测试数据 { "data": 123, "city": "nj,sh", "province":"" } 加工规则 e_search_table_map( tab_parse_csv("search,pop,province\ncity:nj,800,js\ncity:sh,2000,sh"), "search", "province", multi_match=true, multi_join=",", ) 加工结果 data: 123 city: nj,sh province: js,sh
  • e_search_dict_map 对关键字(查询字符串)以及其匹配的值的字典数据进行映射。 函数格式 e_search_dict_map(data, output_field, multi_match=false, multi_join=" ", missing=None, mode="overwrite") 参数说明 参数名称 数据类型 是否必填 说明 data Dict 是 映射关系的字典。必须为标准的{key01:value01,key01:value02,...}格式,且关键字key必须是查询字符串。 output_field String 是 输出字段的名称。 multi_match Boolean 否 是否允许匹配多个字段。默认为false表示不匹配多个字段,会返回匹配到的最后一个字段值。支持使用multi_join拼接多个匹配的值。 multi_join String 否 匹配多个字段时,多值的连接字符串,默认为空格。当multi_match值为true时生效。 missing String 否 无匹配字段时,将该参数的取值赋给输出字段output_field。默认为None表示不做映射赋值操作。 如果字典中包含默认匹配星号(*),由于星号(*)的优先级高于missing,此时missing将不起作用。 mode String 否 字段的覆盖模式。默认为overwrite。 返回结果 返回查询匹配中后的映射结果。 函数示例 示例1:匹配模式。 测试数据 { "data":123 , "pro":1 } 加工规则 e_search_dict_map ({"pro==1": "TCP", "pro==2": "UDP", "pro==3": "HTTP"}, "protocol") 加工结果 data:123 pro:1 protocol:TCP 示例2:根据字段值的不同开头进行映射。 测试数据 { "status":"200,300" } 加工规则 e_search_dict_map( { "status:2??": "ok", "status:3??": "redirect", "status:4??": "auth", "status:5??": "server_error", }, "status_desc", multi_match=true, multi_join="测试", ) 加工结果 status:200,300 status_desc:ok测试redirect 更多参考 支持和其他函数组合使用。
  • e_table_map 与目标表格进行映射,根据输入的字段名称返回字段值。 函数格式 e_table_map(data, field, output_fields, missing=None, mode="fill-auto") 参数说明 参数名称 数据类型 是否必填 说明 data Table 是 目标表格。 field String、String List或Tuple List 是 日志中映射到表格的源字段。如果日志中不存在对应字段,则不进行任何操作。 output_fields String、String List或Tuple List 是 映射后的字段。例如["province", "pop"]。 missing String 否 无匹配字段时,将该参数的取值赋给输出字段output_fields。默认为None表示不做映射赋值操作。如果目标字段是多列,则missing可以是一个长度与目标字段数一致的默认值列表。 说明 如果表格中包含匹配星号(*),由于星号(*)的优先级高于missing,此时missing参数将不起作用。 mode String 否 字段的覆盖模式。默认为fill-auto。 返回结果 返回附带新字段值的日志。 函数示例 示例1:在映射表格中查找对应行,根据city字段返回province字段的值。 测试数据 { "data": 123, "city": "nj" } 加工规则 e_table_map( tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), "city", "province" ) 加工结果 data: 123 city: nj province: js 示例2:在映射表格中查找对应行,根据city字段返回province字段和pop字段的值。 测试数据 { "data": 123, "city": "nj" } 加工规则 e_table_map( tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), "city", ["province", "pop"], ) 加工结果 data: 123 city: nj province: js pop: 800 示例3:使用tab_parse_csv函数构建映射表格,根据city字段返回province字段和pop字段的值。 测试数据 { "data": 123, "city": "nj" } 加工规则 e_table_map( tab_parse_csv("city#pop#province\nnj#800#js\nsh#2000#sh", sep="#"), "city", ["province", "pop"], ) 加工结果 data: 123 city: nj province: js pop: 800 示例4:使用tab_parse_csv函数构建映射表格,根据city字段返回province字段和pop字段的值。 测试数据 { "data": 123, "city": "nj" } 加工规则 e_table_map( tab_parse_csv( "city,pop,province\n|nj|,|800|,|js|\n|shang hai|,2000,|SHANG,HAI|", quote="|" ), "city", ["province", "pop"], ) 加工结果 data: 123 city: nj province: js pop: 800 示例5:日志匹配字段与映射表格中字段不一样。在映射表格中查找对应行,根据cty或city字段返回province字段的值。 测试数据 { "data": 123, "city": "nj" } 加工规则 e_table_map( tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), [("city", "city")], "province" ) 加工结果 data: 123 city: nj province: js 示例6:日志匹配字段与映射表格中字段不一样,并且对输出字段进行重命名。 测试数据 { "data": 123, "city": "nj" } 加工规则 e_table_map( tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), [("city", "city")], [("province", "pro")], ) 加工结果 data: 123 city: nj pro: js 示例7:多个日志匹配字段。 测试数据 { "data": 123, "city": "nj", "pop": 800 } 加工规则 e_table_map( tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), ["city", "pop"], "province", ) 加工结果 data: 123 city: nj pop: 800 province: js 示例8:多个日志匹配字段,且日志匹配字段与映射表格字段不一样。 测试数据 { "data": 123, "city": "nj", "pp": 800 } 加工规则 e_table_map( tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), [("city", "city"), ("pp", "pop")], "province", ) 加工结果 data: 123 city: nj pp: 800 province: js 更多参考 支持和其他函数组合使用。
  • e_dict_map 与目标数据字典进行映射,根据输入的字段映射一个新字段。 函数格式 e_dict_map(data, field, output_field, case_insensitive=true, missing=None, mode="overwrite") 参数说明 参数名称 数据类型 是否必填 说明 data Dict 是 目标数据字典。必须为标准的{key01:value01,key01:value02,...}格式,且必须是字符串。例如{"1": "TCP", "2": "UDP", "3": "HTTP", "*": "Unknown"}。 field String或者String List 是 一个字段名或者多个字段名的列表。多个字段时: 依次对匹配到的值进行映射。 如果匹配命中多条日志,且mode的取值为overwrite时,则最后一个会覆盖前面的结果。 当没有匹配到任何字段,则使用missing参数的值作为匹配值。 output_field String 是 输出字段的名称。 case_insensitive Boolean 否 匹配时大小写是否不敏感。 如果字典中存在同一个关键字的不同大小写,且case_insensitive为true时,会优先选择大小写完全匹配的值。如果没有,则随机选择一个。 true(默认值):不敏感。 false:敏感 missing String 否 无匹配字段时,将该参数的取值赋给输出字段output_field。默认为None表示不做映射赋值操作。 如果字典中包含匹配星号(*),由于星号(*)的优先级高于missing,此时missing参数不生效。 mode String 否 字段的覆盖模式。默认为overwrite。 取值为:fill,fill-auto,add,add-auto,overwrite,overwrite-auto 返回结果 返回附带新字段的日志。 函数示例 示例1:根据测试数据中pro字段的值和目标数据字典,输出新字段protocol。 测试数据 { "data": 123, "pro": 1 } 加工规则 e_dict_map( {"1": "TCP", "2": "UDP", "3": "HTTP", "6": "HTTPS", "*": "Unknown"}, "pro", "protocol", ) 加工结果 data: 123 pro: 1 protocol: TCP 示例2:根据测试数据中status字段的值和目标数据字典,输出新字段message。 测试数据(三条测试日志) { "status":"500" } { "status":"400" } { "status":"200" } 加工规则 e_dict_map({"400": "错误", "200": "正常", "*": "其他"}, "status", "message") 加工结果 status: 500 message: 其他 status: 400 message: 错误 status: 200 message: 正常 更多参考 支持和其他函数组合使用。
  • 函数列表 类型 函数 说明 字段映射 e_dict_map 与目标数据字典进行映射,根据输入的字段映射一个新字段。支持和其他函数组合使用。 e_table_map 与目标表格进行映射,根据输入的字段名称返回字段值。支持和其他函数组合使用。 搜索映射 e_search_dict_map 对关键字(查询字符串)以及其匹配的值的字典数据进行映射。支持和其他函数组合使用。 e_search_table_map 对某列(查询字符串)以及其匹配的值的表格数据进行映射。
  • e_match_any 判断当前日志字段的值是否满足正则表达式,任意字段匹配返回true,否则返回false。 函数格式 e_match_any(key1, regular_expression1, key2, regular_expression2, ..., full=true) 函数中key和regular_expression必须成对出现。 e_match_any函数通常与op_not、op_and或者op_or结合使用。 参数说明 参数名称 参数类型 是否必填 说明 key String 是 字段名。当字段不存在时,视为当前子条件不匹配。例如:字段f1不存在,那么e_match_any("f1", ...)结果为false。 regular_expression String 是 正则模式。如果需要使用纯粹字符串匹配时(非正则),可以使用函数str_regex_escape修饰正则。 full Bool 否 是否完全匹配,默认为true表示完全匹配。 返回结果 返回字段匹配的判断结果true或false。 函数示例 e_match_any匹配,任意字段匹配则返回true。 测试数据 { "k1": 123, "k2": "abc", "k3": "abc123" } 加工规则 e_set("match",e_match_any('k1', r'\d+', 'k2', '.+')) 加工结果 k1:123 k2:abc k3:abc123 match:true 更多参考 支持和其他函数组合使用。
  • e_match_all 判断当前日志字段的值是否满足正则表达式,所有字段匹配返回true,否则返回false。 函数格式 e_match_all(key1, regular_expression1, key2, regular_expression2, ..., full=true) 函数中key和regular_expression必须成对出现。 e_match_all函数通常与op_not、op_and或者op_or结合使用。 参数说明 参数名称 参数类型 是否必填 说明 字段名 String 是 字段名。当字段不存在时,视为当前子条件不匹配。例如:字段f1不存在,那么e_match_all("f1", ...)结果为false。 正则 String 是 正则模式。如果需要使用纯粹字符串匹配时(非正则),可以使用函数str_regex_escape修饰正则。 full Bool 否 是否完全匹配,默认为true表示完全匹配。 返回结果 返回字段匹配的判断结果true或false。 函数示例 测试数据 { "k1": 123, "k2": "abc", "k3": "abc123" } 加工规则 e_set("match", e_match_all("k1", r"\d+", "k2", r"\d+")) 加工结果 k1:123 k2:abc k3:abc123 match:false 更多参考 支持和其他函数组合使用。
  • e_not_has 判断字段是否不存在。 函数格式 e_not_has("key") 参数说明 参数名称 参数类型 是否必填 说明 key String 是 字段名称。 返回结果 字段不存在返回true,存在返回false。 函数示例 判断日志是否存在content字段,不存在则保留该日志,否则丢弃该日志。 测试数据 { "content": 123 } 加工规则 e_if_else(e_not_has("content"),e_keep(),e_drop()) 加工结果 日志被丢弃。 更多参考 支持和其他函数组合使用。
  • e_match 判断当前日志字段的值是否满足正则表达式。 函数格式 e_match(key, regular_expression, full=true) e_match函数通常与op_not、op_and或者op_or结合使用。 参数说明 参数名称 参数类型 是否必填 说明 key String 是 字段名。当字段不存在时,视为当前子条件不匹配。例如:字段f1不存在,那么e_match("f1", ...)结果为false。 regular_expression String 是 正则表达式。如果需要使用纯粹字符串匹配时(非正则表达式),可以使用函数str_regex_escape修饰正则表达式。 full Bool 否 是否完全匹配,默认为true表示完全匹配。 返回结果 返回字段匹配的判断结果true或false。 函数示例 判断字段k1的值是否为数字。 测试数据 { "k1": 123 } 加工规则 e_set("e_match", e_match("k1",r'\d+')) 加工结果 k1: 123 match: true 更多参考 支持和其他函数组合使用。
  • e_has 判断字段是否存在。 函数格式 e_has("key") 参数说明 参数名称 参数类型 是否必填 说明 key String 是 日志的字段名。 返回结果 字段存在返回true,不存在返回false。 函数示例 判断日志是否存在content字段,存在则保留,不存在则丢弃。 测试数据 { "content": 123 } 加工规则 e_keep(e_has("content")) 加工结果 content: 123
  • 函数列表 类型 函数 说明 基本方法 e_has 判断日志字段是否存在。 e_not_has 判断日志字段是否不存在。支持和其他函数组合使用。 表达式函数 e_search 提供一种简化,类似Lucene语法的事件搜索方式。支持和其他函数组合使用。 e_match 判断当前日志字段的值是否满足正则表达式。支持和其他函数组合使用。 e_match_any 判断当前日志字段的值是否满足正则表达式,任意字段匹配返回true,否则返回false。 e_match_all 判断当前日志字段的值是否满足正则表达式,所有字段匹配返回true,否则返回false。 同时,事件检查函数可以与如下表达式函数配合使用: 类型 函数 说明 基本判断 op_and 逻辑and运算。 op_or 逻辑or运算。 op_not 逻辑not运算。 op_nullif 判断两个表达式的取值。 op_ifnull 返回第一个值不为None的表达式的值。 op_coalesce 返回第一个值不为None的表达式的值。
  • op_min 计算多个字段或表达式表示的数值的最小值。 函数格式 op_min(value1, value2, ...) 参数说明 参数名称 参数类型 是否必填 说明 value1 任意 是 运算值1。 value2 必须与值1一样 是 运算值2。 返回结果 返回多个数值中的最小值。 函数示例 测试数据 { "price_orange": 2, "priority_apple": 13 } 加工规则 e_set("op_min", op_min(ct_int(v("price_orange")),ct_int(v("priority_apple")))) 加工结果 price_orange: 2 priority_apple: 13 op_min: 2
  • op_add 计算多个值的和,可以是字符串或者数字等。 函数格式 op_add(value1, value2, ...) 参数说明 参数名称 参数类型 是否必填 说明 value1 字符串、元组、列表或字典等 是 运算值1。 value2 必须与值1一样 是 运算值2。 返回结果 返回求和操作后的数值。 函数示例 示例1:计算price_orange和price_apple总金额。 测试数据 { "price_orange": 2, "price_apple": 13 } 加工规则 e_set("account",op_add(ct_int(v("price_orange")),ct_int(v("price_apple")))) 加工结果 price_orange: 2, price_apple: 13, account: 15 示例2:统计bytes_in和bytes_out的和。 测试数据 { "bytes_in": 214, "bytes_out": 123 } 加工规则 e_set("total_bytes", op_add(ct_int(v("bytes_in")), ct_int(v("bytes_out")))) 加工结果 bytes_in: 214 bytes_out: 123 total_bytes: 337 示例3:给网址添加HTTPS头。 测试数据 { "host": "xx.com" } 加工规则 e_set("website", op_add("https://", v("host"))) 加工结果 host: xx.com website: https://xx.com
  • op_max 计算多个字段或表达式表示的数值的最大值。 函数格式 op_max(value1, value2, ...) 参数说明 参数名称 参数类型 是否必填 说明 value1 任意 是 运算值1。 value2 必须与值1一样 是 运算值2。 返回结果 返回多个数值中的最大值。 函数示例 测试数据 { "price_orange": 2, "priority_apple": 13 } 加工规则 e_set("max_price", op_max(ct_int(v("price_orange")),ct_int(v("priority_apple")))) 加工结果 price_orange: 2 priority_apple: 13 max_price: 13
  • op_slice 对指定字符串、数组、元组进行截取。 函数格式 op_slice(value, start=0, end=None, step=None) 参数说明 参数名称 参数类型 是否必填 说明 value String 是 函数要切片的值。 start Num 否 截取的起始位置,默认为位置0。 end Num 否 截取的结束位置,不包含该位置,默认为字符串结尾位置。 step Num 否 每次截取的长度。 返回结果 返回提取后的字符串。 函数示例 示例1:对word字段从起点开始进行截取,结尾为2。 测试数据 { "word": "I,love,this,world" } 加工规则 e_set("op_slice",op_slice(v("word"),2)) 加工结果 word: I,love,this,world op_slice: I, 示例2:对word字段从位置2到位置9进行截取,步长为1。 测试数据 { "word": "I,love,this,world" } 加工规则 e_set("op_slice",op_slice(v("word"),2,9,1)) 加工结果 word: I,love,this,world op_slice: love,th
  • op_index 根据字符串、数组、元组的下标返回其对应的元素。 函数格式 op_index(value, index) 参数说明 参数名称 参数类型 是否必填 说明 value String 是 字符串、数组、元组等。 index Num 否 需要传入的字符串、数组或元组的下标。 返回结果 返回下标对应的元素。 函数示例 示例1:返回word字段下标为0的元素。 测试数据 { "word": "I,love,this,world" } 加工规则 e_set("op_index",op_index(v("word"),0)) 加工结果 word: I,love,this,world op_index: I 示例2:返回word字段下标为3的元素。 测试数据 { "word": "I,love,this,world" } 加工规则 e_set("op_index",op_index(v("word"),3)) 加工结果 word: I,love,this,world op_index: o
  • op_in 判断字符串、元组、列表或字典中是否包含特定元素,返回true或false。 函数格式 op_in(value1, value2) 参数说明 参数名称 参数类型 是否必填 说明 value1 字符串、元组、列表或字典等 是 字符串、元组、列表或者字典等。 value2 任意 是 判断的元素。 说明 函数中字符串、元组、列表或字典参数在前,元素在后。 返回结果 如果字符串、元组、列表或字典a中包含元素b返回true,否则返回false。 函数示例 测试数据 { "list": [1, 3, 2, 7, 4, 6], "num2": 2 } 加工规则 e_set("op_in",op_in(v("list"),v("num2"))) 加工结果 list: [1, 3, 2, 7, 4, 6] num2: 2 op_in: true
  • op_len 计算文本字符串中的字符数,可用于字符串和其他返回元组、列表、字典的表达式。 函数格式 op_len(value) 参数说明 参数名称 参数类型 是否必填 说明 value 字符串、元组、列表或字典等 是 运算值。 返回结果 返回字段的长度。 函数示例 测试数据 { "content": "I,love,this,world" } 加工规则 e_set("op_len",op_len(v("content"))) 加工结果 content: I,love,this,world op_len: 17
  • op_not_in 判断字符串、元组、列表或字典中是否不包含特定元素,返回true或false。 函数格式 op_not_in(value1, value2) 参数说明 参数名称 参数类型 是否必填 说明 value1 字符串、元组、列表或字典等 是 字符串、元组、列表或者字典等。 value2 任意 是 判断的元素。 说明 函数中字符串、元组、列表或字典参数在前,元素在后。 返回结果 如果字符串、元组、列表或字典中不包含元素返回true,否则返回false。 函数示例 测试数据 { "list": [1, 3, 2, 7, 4, 6], "num2": 12 } 加工规则 e_set("op_not_in",op_not_in(v("list"),v("num2"))) 加工结果 list: [1, 3, 2, 7, 4, 6] num2: 12 op_not_in: true
  • op_eq 按照a==b条件进行计算,返回true或false。 函数格式 op_eq(value1, value2) 参数说明 参数名称 参数类型 是否必填 说明 value1 任意 是 运算值1。 value2 必须与值1相同 是 运算值2。 返回结果 如果值1与值2相等返回true,否则返回false。 函数示例 示例1: 测试数据 { "content": "hello", "ctx": "hello" } 加工规则 e_set("test_eq", op_eq(v("content"),v("ctx"))) 加工结果 content: hello ctx: hello test_eq: true 示例2: 测试数据 { "content": "hello", "ctx": "ctx" } 加工规则 e_set("test_eq", op_eq(v("content"),v("ctx"))) 加工结果 content: hello ctx: ctx test_eq: false
  • op_ne 按照a!=b条件进行计算,返回true或false。 函数格式 op_ne(value1, value2) 参数说明 参数名称 参数类型 是否必填 说明 value1 任意 是 运算值1。 value2 必须与值1相同 是 运算值2。 返回结果 如果值1不等于值2返回true,否则返回false。 函数示例 示例1: 测试数据 { "priority": 16, "price": 14 } 加工规则 e_set("op_ne",op_ne(ct_int(v("priority")),ct_int(v("price")))) 加工结果 priority: 16 price: 14 op_ne: true 示例2: 测试数据 { "priority": 14, "price": 14 } 加工规则 e_set("op_ne",op_ne(ct_int(v("priority")),ct_int(v("price")))) 加工结果 priority: 14 price: 14 op_ne: false
  • op_or 使用逻辑运算or,对任意类型值进行真假判断。当任意表达式的值为真时返回true,所有表达式值为假时返回false。 函数格式 op_or(expression1, expression2, ...) 参数说明 参数名称 参数类型 是否必填 说明 expression1 任意 是 表达式1。 expression2 任意 是 表达式2。 返回结果 任意表达式的值为真时返回true,所有表达式的值为假时返回false。 对任意类型值进行真假判断。 函数示例 示例1: 测试数据 { "ctx1": 123, "ctx2": 234 } 加工规则 e_set("op_or", op_or(v("ctx1"),v("ctx2"))) 加工结果 ctx1: 123 ctx2: 234 op_or: true 示例2: 测试数据 { "ctx1": 0, "ctx2": 234 } 加工规则 e_set("op_or", op_or(v("ctx1"),v("ctx2"))) 加工结果 ctx1: 0 ctx2: 234 op_or: true 示例3: 测试数据 { "ctx1": "ETL", "ctx2": "aa" } 加工规则 e_set("op_or", op_or(v("ctx1"),v("ctx2"))) 加工结果 ctx1: ETL ctx2: aa op_or: true 示例4: 测试数据 { "ctx1": "true", "ctx2":"false" } 加工规则 e_set("op_or", op_or(v("ctx1"),v("ctx2"))) 加工结果 ctx1: true ctx2: false op_or: true 示例5: 测试数据 { "ctx1": 0, "ctx2":"false" } 加工规则 e_set("op_or", op_or(ct_int(v("ctx1")),v("ctx2"))) 加工结果 ctx1: 0 ctx2: false op_or: true 示例6: 测试数据 { "ctx1": 124, "ctx2": "true" } 加工规则 e_set("op_or", op_or(v("ctx1"),v("ctx2"))) 加工结果 ctx1: 124 ctx2: true op_or: true
  • op_and 使用逻辑运算and,对任意类型值进行真假判断,所有参数值为真时返回true。 函数格式 op_and(value1, value2, ...) 参数说明 参数名称 参数类型 是否必填 说明 value1 任意 是 运算值1。 value2 任意 是 运算值2。 返回结果 所有参数值为真时返回true。 对任意类型值进行真假判断。 函数示例 示例1: 测试数据 { "number1": 123, "number2": 234 } 加工规则 e_set("op_and", op_and(v("number1"),v("number2"))) 加工结果 number1: 123 number2: 234 op_and: true 示例2: 测试数据 { "number1": 0, "number2": 234 } 加工规则 e_set("op_and", op_and(v("number1"),v("number2"))) 加工结果 number1: 0 number2: 234 op_and: false 示例3: 测试数据 { "ctx1": "false", "ctx2": 234 } 加工规则 e_set("op_and", op_and(v("ctx1"),v("ctx2"))) 加工结果 ctx1: false ctx2: 234 op_and: true 示例4: 测试数据 { "ctx1": "true", "ctx2": 234 } 加工规则 e_set("op_and", op_and(v("ctx1"),v("ctx2"))) 加工结果 ctx1: true ctx2: 234 op_and: true
  • op_not 使用逻辑运算not,对任意类型值进行真假判断,返回表达式值的反义布尔值。 函数格式 op_not(expression) 参数说明 参数名称 参数类型 是否必填 说明 expression 任意 是 表达式。 返回结果 返回表达式值的反义布尔值。 对任意类型值进行真假判断。 函数示例 示例1: 测试数据 { "ctx1": "true" } 加工规则 e_set("op_not", op_not(v("ctx1"))) 加工结果 ctx1: true op_not: false 示例2: 测试数据 { "ctx1": 345 } 加工规则 e_set("op_not", op_not(v("ctx1"))) 加工结果 ctx1: 345 op_not: false 示例3: 测试数据 { "ctx1": 0 } 加工规则 e_set("op_not", op_not(ct_int(v("ctx1")))) 加工结果 ctx1: 0 op_not: true 示例4: 测试数据 { "ctx1": "ETL" } 加工规则 e_set("op_not", op_not(v("ctx1"))) 加工结果 ctx1: ETL op_not: false 示例5: 测试数据 { "ctx1": "None" } 加工规则 e_set("op_not", op_not(v("ctx1"))) 加工结果 ctx1: None op_not: false
  • op_coalesce 返回第一个值不为None的表达式的值。 函数格式 op_coalesce(expression1, expression2, ...) 参数说明 参数名称 参数类型 是否必填 说明 expression1 任意 是 表达式1。 expression2 任意 是 表达式2。 返回结果 返回第一个值不为None的表达式的值。 函数示例 示例1: 测试数据 { "test_if": "hello", "escape_name": "Etl" } 加工规则 e_set("test_coalesce", op_coalesce(v("escape_name"),v("test_if"))) 加工结果 test_if: hello escape_name: Etl test_coalesce: Etl 示例2: 测试数据 { "test_if": "hello", "escape_name": "Etl" } 加工规则 e_set("test_coalesce", op_coalesce(v("test_if"),v("escape_name"))) 加工结果 test_if: hello escape_name: Etl test_coalesce: hello
  • op_nullif 如果表达式1等于表达式2,返回None。否则返回表达式1的值。 函数格式 op_nullif(expression1, expression2) 参数说明 参数名称 参数类型 是否必填 说明 expression1 任意 是 表达式1。 expression2 任意 是 表达式2。 返回结果 如果表达式1和表达式2相等返回None,否则返回表达式1的值。 函数示例 示例1: 测试数据 { "test_if": "hello", "escape_name": "Etl" } 加工规则 e_set("test_ifnull", op_nullif(v("test_if"),v("escape_name"))) 加工结果 test_if: hello escape_name: Etl test_ifnull: hello 示例2: 测试数据 { "test_if": "hello", "escape_name": "hello" } 加工规则 e_set("test_ifnull", op_nullif(v("content"),v("escape_name"))) 加工结果 #因为content与escape_name内容一样,所以没有任何内容返回给test_isnull字段。 test_if: hello escape_name: hello
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全