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

函数列表

函数 说明
e_compose 用于组合一系列操作。
  • 常用在e_if、e_switch、e_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
    • 通过e_switch语法和e_output语法结合,将符合规则的日志投递到不同的Logstore。其中default=e_drop(),表示将不满足规则的日志丢弃,不做投递处理。若不设置default参数,则表示满足规则日志都会被投递到配置的第一个Logstore中。
      原始日志:
      __topic__:sas-log-dns
      test: aliyun
      
      __topic__: aegis-log-network
      test:ecs
      
      __topic__: local-dns
      test:sls
      
      __topic__:aegis-log-login
      test:sls
      加工规则:
      e_switch(e_match("__topic__","sas-log-dns"),e_output(name="target1"),
      e_match("__topic__","sas-log-process"),e_output(name="target2"),
      e_match("__topic__","local-dns"),e_output(name="target3"),
      e_match("__topic__","aegis-log-network"),e_output(name="target4"),
      e_match("__topic__","aegis-log-login"),e_output(name="target5"),
      default=e_drop())