本文档主要介绍流程控制函数的语法规则,包括参数解释、函数示例等。

函数列表

函数 说明
e_compose 组合一系列操作。
  • 常用在e_ife_switche_if_else中组合操作。
  • 依次调用操作,将事件传递转换,并返回最后的事件。
  • 对于某一条事件,如果其中某一操作删除了事件,则不会再执行后续操作。
e_if 条件与操作组合。
  • 满足条件则进行对应操作,不满足条件则不进行对应操作,直接进行下一个条件判断。
  • 对于某一条事件,如果其中某一操作删除了事件,则不会再执行后续操作。
e_if_else 根据条件判断的结果进行对应操作。
e_switch 条件与操作的组合。
  • 满足条件则进行对应操作并返回结果,不满足条件则不进行对应操作,直接进行下一个条件判断。
  • 如果没有满足任何条件,但配置了默认参数,则执行默认配置的操作并返回结果。
  • 对于某一条事件,如果其中某一操作删除了事件,则不会再执行后续操作。

e_compose

  • 函数格式
    e_compose(操作1, 操作2, ...)     
  • 参数说明
    参数 参数类型 是否必填 说明
    操作1 全局操作函数 其他全局操作函数或其组合。
    操作2 全局操作函数 其他全局操作函数或其组合。
  • 返回结果

    返回操作后事件。

  • 函数示例:如果content字段的值是123,则首先执行删除agename字段,然后将content字段的值设置为ctx
    原始日志:
    content:123
    age:23
    name:twiss
    加工规则:
    e_if(e_search("content==123"), e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")))
    加工结果:
    ctx:  123

e_if

  • 函数格式
    e_if(条件, 操作)
    e_if(条件1, 操作1, 条件2, 操作2, ....)
    说明 函数中条件操作必须成对出现。
  • 参数说明
    参数 参数类型 是否必填 说明
    条件 任意 其他表达式或其组合。其结果不是布尔值时,会进行真假判断。
    操作 全局操作函数 其他全局操作函数或其组合。
  • 返回结果

    返回加工处理后的事件。

  • 函数示例
    • 示例1:字段值匹配后再进行操作。
      字段resultfailedfailure时,设置事件主题为login_failed_event
      e_if(e_match("result": r"failed|failure"), e_set("__topic__", "login_failed_event"))
    • 示例2:根据字段值判断后再提取数据。
      当字段request_body存在且值非空时,调用字段类操作函数JSON将字段request_body展开成多个值:
      e_if(v("request_body"), e_json("request_body"))
    • 示例3:高级判断后再进行操作。
      valid字段的值为小写failed时,丢弃事件:
      e_if(op_eq(str_lower(v("valid")), "failed"), DROP)
    • 示例4:多个条件按顺序操作。
      e_if(True, e_set("__topic__", "default_login"), 
           e_match("valid", "failed"), e_set("__topic__", "login_failed_event")
        )

e_if_else

  • 函数格式
    e_if_else(条件, 真时操作, 假时操作)
  • 参数说明
    参数 参数类型 是否必填 说明
    条件 任意 其他表达式或其组合。其结果不是布尔值时,会进行真假判断。
    真时操作 全局操作函数 其他全局操作函数或其组合。
    假时操作 全局操作函数 其他全局操作函数或其组合。
  • 返回结果

    返回不同条件对应的操作结果。

  • 函数示例:如果result字段的值是okpass,或者status字段的值为200,则保留日志否则删除。
    原始日志:
    result: Ok
    status: 400
    result: Pass
    status: 200
    result: failure
    status: 500
    加工规则:
    e_if_else(op_or(e_match("result", r"(?i)ok|pass"), e_search("status== 200"), KEEP, DROP)
    加工结果:只会保留第一条和第二条日志,第三条则会被删除。
    result: Ok
    status: 400
    result: Pass
    status: 200

e_switch

  • 函数格式
    e_switch(条件1, 操作1, ..., default=None)
    说明 函数中条件操作必须成对出现。
  • 参数说明
    参数 参数类型 是否必填 说明
    条件 任意 其他表达式或其组合。其结果不是布尔值时,会进行真假判断。
    操作 全局操作函数 其他全局操作函数或其组合。
    default 全局操作函数 默认的其他全局操作函数或其组合。没有条件满足时执行该操作。
  • 返回结果

    返回加工处理后的事件。

  • 函数示例:如果content字段的值是123,则将__topic__字段的值设置为Number。如果data字段的值是123,则将__topic__字段的值设置为PRO
    原始日志:
    __topic__:  
    age:  18
    content:  123
    name:  maki
    data:342
    __topic__:  
    age:  18
    content:  23
    name:  maki
    data:123
    加工规则:
    e_switch(e_search("content==123"), e_set("__topic__", "Number", mode="overwrite"), e_search("data==123"), e_set("__topic__", "PRO", mode="overwrite"))
    加工结果:
    __topic__:  Number
    age:  18
    content:  123
    name:  maki
    data:342
    __topic__:  PRO
    age:  18
    content:  23
    name:  maki
    data:123