本文档主要介绍事件检查函数的语法规则,包括参数解释、函数示例等。
函数列表
类型 | 函数 | 说明 |
---|---|---|
基本方法 | v | 获得事件特定字段的值,传入多个字段名时,返回事件中第一个存在的字段的值。 |
e_has | 判断字段是否存在。 | |
e_not_has | 判断字段是否不存在。 | |
表达式函数 | e_search | 提供一种简化,类似Lucene语法的事件搜索方式。 |
e_match* | 包含e_match 、e_match_all 和e_match_any 三个函数。判断当前事件字段的值是否满足特定条件的表达式。
|
v
- 函数格式
v(字段名, ..., default=None)
- 参数说明
参数名称 参数类型 是否必填 说明 字段名 String 是 传入要获取值的事件的字段名。 default 任意 否 没有字段存在时,返回默认值None。 - 返回结果
返回事件中第一个存在的字段值。不存在时返回参数
default
值。 - 函数示例
将content字段的值赋给test_content字段。
- 原始日志
content: hello
- 加工规则
e_set("test_content", v("content"))
- 加工结果
content: hello test_content: hello
- 原始日志
e_has
- 函数格式
e_has("字段名")
- 参数说明
参数名称 参数类型 是否必填 说明 字段名 String 是 事件的字段名。 - 返回结果
存在返回True,不存在返回False。
- 函数示例
判断事件是否存在content字段,存在则保留,不存在则丢弃。
- 原始日志
content: 123
- 加工规则
e_keep(e_has("content"))
- 加工结果
content: 123
- 原始日志
e_not_has
- 函数格式
e_not_has("字段名")
- 参数说明
参数名称 参数类型 是否必填 说明 字段名 String 是 事件的字段名。 - 返回结果
不存在返回True,存在返回False。
- 函数示例
判断事件是否不存在content字段,不存在保留该事件,否则丢弃该事件。
- 原始日志
content: 123
- 加工规则
e_if(e_not_has("content"),KEEP,DROP)
- 加工结果
# 事件被丢弃
- 原始日志
e_search
- 函数格式
e_search(查询字符串)
- 参数说明
参数名称 参数类型 是否必填 说明 查询字符串 String 是 用于快速过滤的语法。更多信息,请参见查询字符串语法。 - 返回结果
满足条件返回True,否则返回False。
- 函数示例
# 全文 e_search("active error") # 全文:两个子串是OR关系,进行搜索。 e_search('"active error"') # 全文:一个子串搜索。 # 字段:字符串 e_search("status: active") # 单词搜索。 e_search('author: "john smith"') # 带空格子串搜索。 e_search('field: active error') # 相当于field:active OR "error"。 # 完全匹配 e_search('author== "john smith"') # 通配符搜索,星号(*)匹配零个或多个字符,问号(?)匹配一个字符。 e_search("status: active*test") #
active*test
中仅包含星号(*),可以不使用双引号("")包裹。 e_search("status: active?good") #active?good
中仅包含问号(?),可以不使用双引号("")包裹。 e_search("status== ac*tive?good") # 完全匹配。 # 搜索值转义,星号(*)或问号(?)需要使用反斜线(\)转义。 e_search('status: "\*\?()[]:="') #\*\?()[]:=
中包含特殊字符,需要使用双引号("")包裹,除了星号(*)、问号(?)和反斜线(\)需要转义外,其他不用转义。 e_search("status: active\*test") #active\*test
中仅包含星号(*),可以不使用双引号("")包裹。 e_search("status: active\?test") #active\?test
中仅包含问号(?),可以不使用双引号("")包裹。 # 字段名转义 e_search("\*\(1+1\)\?: abc") # 字段名不能用双引号("")包裹,特殊字符用反斜线(\)转义。 e_search("__tag__\:__container_name__: abc") # 用反斜线(\)转义。 e_search("中文字段: abc") # 直接写中文。 # 正则匹配 e_search('content~="正则表达式"') # 正则匹配。 # 数字 e_search('count: [100, 200]') # >=100 and <=200 e_search('count: [*, 200]') # <=200 e_search('count: [200, *]') # >=200 e_search('age >= 18') # >= 18 e_search('age > 18') # > 18 # 使用关系运算符 e_search("abc OR xyz") # 关系运算符不区分大小写,OR和or效果一样。 e_search("abc and (xyz or zzz)") e_search("abc and not (xyz and not zzz)") e_search("abc && xyz") # and e_search("abc || xyz") # or e_search("abc || !xyz") # or not
e_match*
- 函数格式
e_match(字段名, 正则, full=True) e_match_all(字段名1, 正则1, 字段名2, 正则2, ..., full=True) e_match_any(字段名1, 正则1, 字段名2, 正则2, ..., full=True)
说明- 函数中
字段名
和正则
必须成对出现。 - e_match函数通常与
op_not
、op_and
或者op_or
结合使用。
- 函数中
- 参数说明
参数名称 参数类型 是否必填 说明 字段名 String 是 字段名。当字段不存在时,视为当前子条件不匹配。 例如:字段
f1
不存在,那么e_match("f1", ...)
结果为False。正则 String 是 正则模式。如果需要使用纯粹字符串匹配时(非正则),可以使用函数 str_regex_escape
修饰正则。full Bool 否 是否完全匹配,默认为True表示完全匹配。关于匹配模式请参见正则表达式。 - 返回结果
返回字段匹配的判断结果True或False。说明
e_match_any
:任意字段满足匹配返回True,否则返回False。e_match_all
:所有字段满足匹配返回True,否则返回False。
- 函数示例
- 示例1
e_match匹配。
- 原始日志
k1: 123
- 加工规则
e_set("match",e_match("k1",r'\d+'))
- 加工结果
k1: 123 match: True
- 原始日志
- 示例2
e_match_all匹配。
- 原始日志
k1: 123 k2: abc k3: abc123
- 加工规则
e_set("match",e_match_all('k1', r'\d+', 'k4', '.+'))
- 加工结果
k1: 123 k2: abc k3: abc123 match: False
说明 e_match_any用法与e_match_all类似。 - 原始日志
- 示例1