本文档主要介绍事件检查函数的语法规则,包括参数解释、函数示例等。

函数列表

类型 函数 说明
基本方法 v 获得事件特定字段的值,传入多个字段名时,返回事件中第一个存在的字段的值。
e_has 判断字段是否存在。
e_not_has 判断字段是否不存在。
表达式函数 e_search 提供一种简化,类似Lucene语法的事件搜索方式。
e_match* 包含e_matche_match_alle_match_any三个函数。判断当前事件字段的值是否满足特定条件的表达式。
可以与如下表达式函数配合使用:
类型 函数 说明
基本判断 操作符函数 逻辑and运算。
操作符函数 逻辑or运算。
操作符函数 逻辑not运算。
操作符函数 判断两个表达式的取值。
操作符函数 返回第一个值不为None的表达式的值。
操作符函数 返回第一个值不为None的表达式的值。

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")     # 全文: 2个是OR关系搜索
    e_search('"active error"')   # 全文: 一个子串搜索
    
    """字段: 字符串"""
    e_search("status: active")         # 单词搜索
    e_search('author: "john smith"')   # 带空格子串搜索
    e_search('fileld: active error')   # 相当于 field:active OR "error"
    
    """完全匹配"""
    e_search('author== "john smith"')  
    
    """* ? 匹配: * 0个或多个, ? 表示一个字符"""
    e_search("status: active*test")    # *可以不用双引号
    e_search("status: active?good")    # ?可以不用双引号
    e_search("status== ac*tive?good")  # 完全匹配
    
    """值转义 ( *, ? 在值中需要转义 )"""
    e_search('status: "\*\?()[]:="')  # 包含特殊字符的值, 推荐放在"中, 除了*,?和\需要转义外, 其他不用转义
    e_search("status: active\*test")  # 值仅包含*或?, 可以不用双引号
    e_search("status: 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")    # 大小写不敏感
    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)
    说明 函数中字段名正则必须成对出现。
  • 参数说明
    参数名称 参数类型 是否必填 说明
    字段名 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。

    通常与op_notop_and或者op_or结合使用。

  • 函数示例
    • 示例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类似。