华为云用户手册

  • 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_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_if 根据判断条件返回不同表达式的值。 函数格式 op_if(condition, expression1, expression2) 参数说明 参数名称 参数类型 是否必填 说明 condition 任意 是 判断条件。如果该条件为非布尔值,系统将对其采用真假判断。 expression1 任意 是 判断结果为true时,返回该表达式的值。 expression2 任意 是 判断结果为false时,返回该表达式的值。 返回结果 返回相应的表达式的值。 函数示例 示例1:如果content为true,则把表达式1的值赋给test_if。 测试数据 { "content": "hello" } 加工规则 e_set("test_if", op_if(v("content"),"still origion content","replace this")) 加工结果 content: hello test_if: still origion content 示例2:如果content为false,则把表达式2的值赋给test_if。 测试数据 { "content": 0 } 加工规则 e_set("test_if", op_if(ct_int(v("content", default=0)),"still origion content","replace this")) 加工结果 content: 0 test_if: replace this
  • op_ifnull 返回第一个值不为None的表达式的值。 函数格式 op_ifnull(expression1, expression2, ....) 参数说明 参数名称 参数类型 是否必填 说明 expression1 任意 是 表达式1。 expression2 任意 是 表达式2。 返回结果 返回第一个值不为None的表达式的值。 函数示例 示例1: 测试数据 { "test_if": "hello", "escape_name": "Etl" } 加工规则 e_set("test_ifnull", op_ifnull(v("escape_name"),v("test_if"))) 加工结果 test_if: hello escape_name: Etl test_ifnull: Etl 示例2: 测试数据 { "test_if": "hello", "escape_name": "Etl" } 加工规则 e_set("test_ifnull", op_ifnull(v("test_if"),v("escape_name"))) 加工结果 test_if: hello escape_name: Etl test_ifnull: hello
  • 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
  • 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
  • json_select 根据JMES语法提取或计算JSON表达式中特定的值。 函数格式 json_select(value, jmes, default=None, restrict=false) 参数说明 参数 类型 是否必填 说明 value String、JSON 是 传入待提取字段的JSON表达式或字段。 jmes String 是 JMES表达式,表示提取的字段。 default String 否 如果提取字段不存在,则返回此处设置的值。默认为None,表示不返回字段。 restrict Bool 否 提取字段的值不是合法的JSON格式时,是否严格限制加工。 默认值false。 false:忽略报错,数据加工继续处理,返回default定义的值。 true:直接报错,数据加工不再继续处理,直接丢弃该条日志。 返回结果 返回提取到的值。 函数示例 示例1:从content字段提取元素name的值。 测试数据 { "content": {\"name\": \"xiaoming\", \"age\": 10} } 加工规则 e_set("json_filter",json_select(v("content"), "name")) 加工结果 content: {"name": "xiaoming", "age": 10} json_filter: xiaoming 示例2:从content字段提取元素name包含的所有值。 测试数据 { "content": {\"name\": [\"xiaoming\", \"xiaowang\", \"xiaoli\"], \"age\": 10} } 加工规则 e_set("json_filter", json_select(v("content"), "name[*]")) 加工结果 content: {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10} json_filter: ["xiaoming", "xiaowang", "xiaoli"] 示例3:从content字段提取元素name3的值,若字段不存在,则返回default的值。 测试数据 { "content": {\"name\": \"xiaoming\", \"age\": 10} } 加工规则 e_set("json_filter", json_select(v("content"), "name3", default="None")) 加工结果 content: {"name": "xiaoming", "age": 10} json_filter: None 示例4:从content字段提取携带短划线(-)的元素name-test的值。 测试数据 { "content": {\"name\": {\"name-test\":\"xiaoming\"}, \"age\": 10} } 加工规则 e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None)) 加工结果 content: {"name": {"name-test":"xiaoming"}, "age": 10} json_filter: xiaoming 示例5:从content字段提取携带短划线(-)的元素name-test的值,若元素不存在,则不返回字段。 测试数据 { "content": {\"name\": {\"name.test\":\"xiaoming\"}, \"age\": 10} } 加工规则 e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None)) 加工结果 content: {"name": {"name-test":"xiaoming"}, "age": 10}
  • json_parse 将值解析为JSON对象。 函数格式 json_parse(value, default=None, restrict=false) 参数说明 参数 类型 是否必填 说明 value String 是 传入需要被解析的字段。 default String 否 如果解析字段不存在,则返回此处设置的值。默认为None,表示不返回字段。 restrict Bool 否 解析字段的值不是合法的JSON格式时,是否严格限制加工。 默认值false。 false:忽略报错,数据加工继续处理,返回default定义的值。 true:直接报错,数据加工不再继续处理,直接丢弃该条日志。 返回结果 返回转换后的JSON对象。 函数示例 示例1:提取content字段的JSON值。 测试数据 { "content": {\"abc\": 123, \"xyz\": \"test\" } } 加工规则 e_set("json", json_parse(v("content"))) 加工结果 content: {"abc": 123, "xyz": "test" } json: {"abc": 123, "xyz": "test"} 示例2:提取content字段的值,如果不是JSON格式,则返回default的值。 测试数据 { "content": "this is not json" } 加工规则 e_set("json", json_parse(v("content"), default="FFF", restrict=false)) 加工结果 content: this is not json json: FFF
  • e_has 判断字段是否存在。 函数格式 e_has("key") 参数说明 参数名称 参数类型 是否必填 说明 key String 是 日志的字段名。 返回结果 字段存在返回true,不存在返回false。 函数示例 判断日志是否存在content字段,存在则保留,不存在则丢弃。 测试数据 { "content": 123 } 加工规则 e_keep(e_has("content")) 加工结果 content: 123
  • 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_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_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_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的表达式的值。
  • str_zip 函数格式 str_zip(value1,value2,combine_sep=None,sep=None,quote=None,lparse=None,rparse=None) 参数说明 参数名称 参数类型 是否必填 说明 value1 任意(自动转为String) 是 需要被合并的值。 value2 任意(自动转为String) 是 需要被合并的值。 combine_sep 任意(自动转为String) 否 合并时元素之间的合并标识,默认为# sep 任意(自动转为String) 否 合并后元素之间的分隔符,仅支持单个字符,默认为, quote 任意(自动转为String) 否 将合并后的元素括起来的字符,当值包含分隔符时需要使用,默认为" lparse 任意(自动转为String) 否 指定value1中元素之间的分隔符和引用符,默认分隔符为,,默认引用符为"。格式为lparse=(',', '"')。 说明 引用符优先级高于分隔符。 rparse 任意(自动转为String) 否 指定value2中元素之间的分隔符和引用符,默认分隔符为,,默认引用符为"。格式为rparse=(',', '"')。 说明 引用符优先级高于分隔符。 返回结果 合并后的字符串。 函数示例 示例1:sep的使用。 测试数据 { "key1": "value1,value11", "key2": "value2,value21" } 加工规则 e_set("combine", str_zip(v("key1"), v("key2"), sep="|")) 加工结果 key1: value1,value11 key2: value2,value21 combine: value1#value2|value11#value21 示例2:quote的使用。 测试数据 { "key1": "\"value1, value2\", value3, \"value4,value5\"", "key2": "value11,\"value12,value13\",value14" } 加工规则 e_set("combine", str_zip(v("key1"), v("key2"), quote='|')) 加工结果 key1: "value1, value2", value3, "value4,value5" key2: value11,"value12,value13",value14 combine: |value1,value2#value11|,|value3#value12,value13|,|value4,value5#value14| 示例3:不同长度的值。 测试数据 { "key1": "value1,value2", "key2": "value11,value12,value13" } 加工规则 e_set("combine", str_zip(v("key1"), v("key2"))) 加工结果 key1: value1,value2 key2: value11,value12,value13 combine: value1#value11,value2#value12 示例4:lparse和rparse的使用。 测试数据 { "key1": "|value1, value1|, value2, |value3,value3|", "key2": "value11, #value12,value12#, value13" } 加工规则 e_set("combine", str_zip(v("key1"), v("key2"), lparse=(",", '|'), rparse=(",", '#'))) 加工结果 key1: |value1, value1|, value2, |value3,value3| key2: value11, #value12,value12#, value13 combine: "value1,value1#value11","value2#value12,value12","value3,value3#value13"
  • str_reverse 函数格式 str_reverse(value) 参数说明 参数名称 参数类型 是否必填 说明 value 任意(自动转为String) 是 需要被反转的值 返回结果 反转后的字符串。 函数示例 测试数据 { "data": "switch" } 加工规则 e_set("reverse_data", str_reverse(v("data"))) 加工结果 data: switch reverse_data: hctiws
  • str_replace 函数格式 str_replace(value, old, new, count) 参数说明 参数名称 参数类型 是否必填 说明 value 任意(自动转为String) 是 需要被替换的值。 old 任意(自动转为String) 是 需要被替换的字符串。 new 任意(自动转为String) 是 替换后新的字符串。 count Number 否 替换次数,可选项。如果不设置count,则表示替换所有。 返回结果 替换后的新字符串。 函数示例 测试数据:无 加工规则 e_set("str_replace", str_replace("this is string example", "is", "was")) 加工结果 str_replace: thwas was string example
  • str_translate 函数格式 str_translate(value, replace_string, mapping_string) 参数说明 参数名称 参数类型 是否必填 说明 value 任意(自动转为String) 是 需要被替换的原字符串。 replace_string 任意(自动转为String) 是 需要替换的字符集合。 mapping_string 任意(自动转为String) 是 替换后的字符集合。 返回结果 处理后的字符串。 函数示例 测试数据:无 加工规则 e_set("str_translate", str_translate("lts", "ts", "34")) 加工结果 str_translate: l34
  • str_sort 函数格式 str_sort(value, reverse=false) 参数说明 参数名称 参数类型 是否必填 说明 value 任意(自动转为String) 是 需要被排序的原字符串。 reverse Boolean 否 默认为false,表示升序排列。 返回结果 排序后的字符串。 函数示例 测试数据 { "key1": "value" } 加工规则 e_set("str_sort", str_sort(v("key1"))) 加工结果 key1: value str_sort: aeluv
  • str_join 函数格式 str_join(connector, str1, str2, ...) 参数说明 参数名称 参数类型 是否必填 说明 connector 任意(自动转为string) 是 连接符,比如#,$,%等 str1 任意(自动转为string) 是 待连接的值1 str2 任意(自动转为string) 是 待连接的值2 返回结果 连接后的字符串。 函数示例 测试数据:无 加工规则 e_set("email", str_join("@", "lts", "aa", "com")) 加工结果 email: lts@aa@com
  • str_format 函数格式 str_format(format, str1, str2, ...) 参数说明 参数名称 参数类型 是否必填 说明 format string 是 转换后的格式 str1 任意 是 待格式化的值1 str2 任意 是 待格式化的值2 返回结果 格式化后的字符串。 函数示例 测试数据:无 加工规则 e_set("result", str_format("{}={}", "lts", 8)) 加工结果 result: lts=8
  • e_output、e_coutput 输出日志到指定的Logstream中,并可配置输出时的topic、source、tag等信息。 函数格式 e_output(logsteam, tags=None) e_coutput(logstream, tags=None) 预览时不会输出日志到目标Logstream中,而是输出到页面,供您调试。 参数说明 参数名称 参数类型 是否必填 说明 Logstream String 否 输出日志到已存在的Logstream。 tags Dict 否 为日志设置新的标签,以字典格式传入。 加工结果 e_output:输出日志到指定的Logstream中,且对应的日志不再执行后面的加工规则。 e_coutput:输出日志到指定的Logstream中,且对应的日志继续执行后面的加工规则。 函数示例 说明:因为函数将结果输出到指定日志流,因此无法在执行预览中测试,需要到实际的加工任务中测试。 示例1:将k2满足正则表达式,输出到target2中。 测试数据 { "__topic__":, "k1": "v1", , "k2":"v2", "x1":"v3" , "x5": "v4" } 加工规则 此处e_drop()函数的作用是把e_if()函数过滤掉的数据做删除处理。如果不添加该函数,则被过滤的数据被投递到默认的存储目标中。 e_if(e_match("k2", r"\w+"), e_output("target2")) e_drop() 加工结果 需要将日志输出到指定日志流,不支持预览 示例2:将k2满足正则表达式,输出到target2中,并topic设置为topic1。 测试数据 { "__topic__":, "k1": "v1", , "k2":"v2", "x1":"v3" , "x5": "v4" } 加工规则 e_if(e_match("k2", r"\w+"), e_output("target2", tags={"topic": "topic1"})) e_drop() 加工结果 需要将日志输出到指定日志流,不支持预览 更多参考 支持和其他函数组合使用。
  • e_split 基于日志字段的值分裂出多条日志,并且支持通过JMES提取字段后再进行分裂。 函数格式 e_split(字段名, sep=',', quote='"', lstrip=true, jmes=None, output=None) 分裂规则: 如果配置了jmes参数,则将日志字段的值转化为JSON列表,并使用JMES提取值作为下一步的值。如果没有配置jmes参数,则将字段的值直接作为下一步的值。 如果上一步的值是一个列表或JSON列表格式的字符串,则按照此列表分裂并结束处理。否则使用sep、quote或lstrip将上一步的值进行CSV解析,根据解析后的多个值进行分裂并结束处理。 参数说明 参数名称 参数类型 是否必填 说明 字段名 String 是 需要分裂的字段名。 sep String 否 用于分隔多个值的分隔符。 quote String 否 用于引用多个值的配对类字符的引用符。 lstrip String 否 是否将值左边的空格去掉,默认为true。 jmes String 否 将字段值转化为JSON对象,并使用JMES提取特定值,再进行分裂操作。 output String 否 设置一个新的字段名,默认覆盖旧字段名。 返回结果 返回日志列表,列表中字段的值都是源列表中的值。 函数示例 测试数据 { "__topic__":, "age": 18, "content": 123, "name": "maki" , "__topic__":, "age": 18, "content": 123, "name": "maki" } 加工规则 e_set("__topic__", "V_SENT,V_RECV,A_SENT,A_RECV") e_split("__topic__") 加工结果 __topic__: V_SENT name: maki age: 18 content: 123 __topic__: V_RECV name: maki age: 18 content: 123 __topic__: A_SENT name: maki age: 18 content: 123 __topic__: A_RECV name: maki age: 18 content: 123 更多参考 支持和其他函数组合使用。
  • e_drop 根据条件判断是否丢弃日志。 函数格式 e_drop(condition=true) 支持固定标识DROP,等价于e_drop()。 参数说明 参数名称 参数类型 是否必填 说明 condition Bool 否 默认为true,一般传递一个条件判断函数的结果。 返回结果 满足条件则丢弃日志并返回None,否则返回原日志。 函数示例 示例1:当__programe__字段的值为access时丢弃日志,否则保留该日志。 测试数据 [ { "__programe__": "access", "age": 18, "content": 123, "name": "maki" }, { "__programe__": "error", "age": 18, "content": 123, "name": "maki" } ] 加工规则 e_if(e_search("__programe__==access"), DROP) 加工结果 丢弃__programe__字段值为access的日志,保留__programe__字段的值为error的日志。 __programe__: error age: 18 content: 123 name: maki 示例2:条件判断结果为true,丢弃日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1" } 加工规则 e_drop(e_search("k1==v1")) 加工结果 因为k1==v1条件为true,因此丢弃该日志。 示例3:条件判断结果为false,保留日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1" } 加工规则 e_drop(e_search("not k1==v1")) 加工结果 k1: v1 k2: v2 k3: k1 示例4:不设置判断条件时,使用默认值true,丢弃日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1" } 加工规则 e_drop() 加工结果 丢弃日志。 更多参考 支持和其他函数组合使用。
  • 函数列表 类型 函数 说明 事件操作 e_drop 根据条件判断是否丢弃日志。支持和其他函数组合使用。 e_keep 根据条件判断是否保留日志。 e_keep函数和e_drop函数都会丢弃日志。e_keep函数在不满足条件时丢弃,而e_drop函数则是在满足条件时丢弃。 # 以下4个加工规则等价 e_if_else(e_search("f1==v1"), e_keep(), e_drop()) e_if_else(e_search("not f1==v1"), e_drop()) e_keep(e_search("f1==v1")) e_drop(e_search("not f1==v1")) # 以下加工规则无意义 e_if(e_search("..."), e_keep()) e_keep() 支持和其他函数组合使用。 事件分裂 e_split 基于日志字段的值分裂出多条日志,并且支持通过JMES提取字段后再进行分裂。支持和其他函数组合使用。 输出事件 e_output、e_coutput 输出日志到指定的Logstream中,并可配置输出时的topic、source、tag和shard hash信息。 e_output:执行到e_output函数时,输出日志到指定的Logstream中,且对应的日志不再执行后面的加工规则。 e_coutput:执行到e_coutput函数时,输出日志到指定的Logstream中,且对应的日志继续执行后面的加工规则。 支持和其他函数组合使用。
  • e_keep 据条件判断是否保留日志。 函数格式 e_keep(condition=true) 支持固定标识KEEP,等价于e_keep()。 参数说明 参数名称 参数类型 是否必填 说明 condition Bool 否 默认为true,一般传递一个条件判断函数的结果。 返回结果 满足条件则返回原日志,不满足时丢弃日志。 函数示例 示例1:当__programe__字段的值是access的时候保留日志,否则丢弃日志。 测试数据 [ { "__programe__": "access" , "age": 18, "content": 123, "name": "maki" }, { "__programe__": "error" , "age": 18, "content": 123, "name": "maki" } ] 加工规则 e_keep(e_search("__programe__==access")) #等价于 e_if(e_search("not __programe__==access"), e_drop()) #等价于 e_if_else(e_search("__programe__==access"), e_keep(), e_drop()) 加工结果 保留__programe__字段值为access的日志。 __programe__: access age: 18 content: 123 name: maki 示例2:条件判断结果为true,保留日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1" } 加工规则 e_keep(e_search("k1==v1")) 加工结果 k1: v1 k2: v2 k3: k1 示例3:条件判断结果为false,丢弃日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1" } 加工规则 e_keep(e_search("not k1==v1")) 加工结果:丢弃日志。 示例4:判断条件为false。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1" } 加工规则 e_keep(false) 加工结果:丢弃日志。 更多参考 支持和其他函数组合使用。
  • 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 更多参考 支持和其他函数组合使用。
  • 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 否 匹配时大小写是否不敏感。 true(默认值):不敏感。 false:敏感 说明: 如果字典中存在同一个关键字的不同大小写,且case_insensitive为true时,会优先选择大小写完全匹配的值。如果没有,则随机选择一个。 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: 正常 更多参考 支持和其他函数组合使用。
共100000条