全部产品
Search
文档中心

日志服务:流程控制函数

更新时间:Jul 18, 2024

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

函数列表

函数

说明

e_compose

用于组合一系列操作。

  • 常用于e_if、e_switch、e_if_else中组合操作。

  • 依次调用操作,将日志传递转换并返回最后的日志。

  • 对于某一条日志,如果其中某一操作删除了日志,则不会再执行后续操作。

支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工

e_if

条件与操作组合。

  • 满足条件则进行对应操作,不满足条件则不进行对应操作,直接进行下一个条件判断。

  • 对于某一条日志,如果其中某一操作删除了日志,则不会再执行后续操作。

e_if(
    e_has("a"), e_output("target-a"), 
    e_has("b"), e_output("target-b"),
)

例如,该加工规则相当于以下Python代码结构:

if e_has("a"):
    e_output("target-a")
if e_has("b"):
    e_output("target-b")

支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工

e_if_else

根据条件判断的结果进行对应操作。

e_if_else(e_has("a"), e_output("target-a"), e_output("target-b"))

例如,该加工规则相当于以下Python代码结构:

if e_has("a"):
    e_output("target-a")
else:
    e_output("target-b")

e_switch

条件与操作的组合。

  • 满足条件则进行对应操作并返回结果,不满足条件则不进行对应操作,直接进行下一个条件判断。

  • 如果没有满足任何条件,但配置了默认参数,则执行默认配置的操作并返回结果。

  • 对于某一条日志,如果其中某一操作删除了日志,则不会再执行后续操作。

e_switch(
    e_has("a"), e_output("target-a"), 
    e_has("b"), e_output("target-b"),
    default=e_output("target-default"),
)

例如,该加工规则相当于以下Python代码结构:

if e_has("a"):
    e_output("target-a")
elif e_has("b"):
    e_output("target-b")
else:
    e_output("target-default")

支持和其他函数组合使用。相关示例,请参见多目标Logstore数据分发

e_compose

组合多个操作。

  • 函数格式

    e_compose(操作1, 操作2, ……)     
  • 参数说明

    参数名称

    参数类型

    是否必填

    说明

    操作1

    全局操作函数

    全局操作函数或其组合。

    操作2

    全局操作函数

    全局操作函数或其组合。

  • 返回结果

    返回操作后日志。

  • 函数示例

    如果content字段的值为123,则先删除age字段和name字段,然后将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
  • 更多参考

    支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工

e_if

根据判断条件执行操作。

  • 函数格式

    e_if(条件, 操作)
    e_if(条件1, 操作1, 条件2, 操作2, ……)
    说明

    函数中条件操作必须成对出现。

  • 参数说明

    参数名称

    参数类型

    是否必填

    说明

    条件

    任意

    表达式或其组合。其结果不是布尔值时,会进行真假判断。

    操作

    全局操作函数

    全局操作函数或其组合。

  • 返回结果

    返回加工处理后的日志。

  • 函数示例

    • 示例1:字段值匹配后再进行操作。

      result字段值为failedfailure时,设置__topic__字段的值为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")
        )
  • 更多参考

    支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工

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())
  • 更多参考

    支持和其他函数组合使用。相关示例,请参见多目标Logstore数据分发