更新时间:2024-11-01 GMT+08:00
分享

流程控制函数

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

函数列表

函数

说明

e_compose

用于组合一系列操作。

  • 常用于e_if、e_switch、e_if_else中组合操作。
  • 依次调用操作,将日志传递转换并返回最后的日志。
  • 对于某一条日志,如果其中某一操作删除了日志,则不会再执行后续操作。

支持和其他函数组合使用。

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")

支持和其他函数组合使用。

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")

支持和其他函数组合使用。

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

    支持和其他函数组合使用。

e_if

据判断条件执行操作。

  • 函数格式
    e_if(条件, 操作) 
    e_if(条件1, 操作1, 条件2, 操作2, ……)

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

  • 参数说明

    参数名称

    参数类型

    是否必填

    说明

    条件

    任意

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

    操作

    全局操作函数

    全局操作函数或其组合。

  • 返回结果

    返回加工处理后的日志。

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

      result字段值为failed或failure时,设置__topic__字段的值为login_failed_event

      • 测试数据
        {
         "result": "failed"
        }
      • 加工规则
        e_if(e_match("result", r"failed|failure"), e_set("__topic__", "login_failed_event"))
      • 加工结果
        result: failed
        __topic__: login_failed_event
    2. 示例2:根据字段值判断后再提取数据。

      当request_body字段存在且值非空时,调用字段类操作函数JSON将request_body字段展开成多个值。

      • 测试数据
        {
         "request_body": {\"k1": 100, \"k2\": 200}
        }
      • 加工规则
        e_if(v("request_body"), e_json("request_body"))
      • 加工结果
        request_body: {"k1": 100, "k2": 200}
        k1: 100
        k2: 200
    3. 示例3:高级判断后再进行操作。

      当valid字段的值为小写failed时,丢弃日志。

      • 测试数据
        {
         "valid":"failed"
        }
      • 加工规则
        e_if(op_eq(str_lower(v("valid")), "failed"),  e_drop())
      • 加工结果:丢弃日志
    4. 示例4:多个条件按顺序操作。
      • 测试数据
        {
         "valid":"failed"
        }
      • 加工规则
        e_if(True, e_set("__topic__", "default_login"),   e_match("valid", "failed"), e_set("__topic__", "login_failed_event"))
      • 加工结果
        valid: failed
        __topic__:login_failed_event
  • 更多参考

    支持和其他函数组合使用。

e_if_else

根据判断条件的结果执行操作。

  • 函数格式
    e_if_else(条件, 真时操作, 假时操作)
  • 参数说明

    参数名称

    参数类型

    是否必填

    说明

    条件

    任意

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

    真时操作

    全局操作函数

    全局操作函数或其组合。

    假时操作

    全局操作函数

    全局操作函数或其组合。

  • 返回结果

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

  • 函数示例

    如果result字段的值为ok或pass,或者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")), e_keep(),e_drop() 
      )
    • 加工结果
      result: ok 
      status: 400
      result: Pass 
      status: 200

e_switch

组合多个条件和操作。

  • 函数格式
    e_switch(条件1, 操作1, ……, default=None)

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

  • 参数说明

    参数名称

    参数类型

    是否必填

    说明

    条件

    任意

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

    操作

    全局操作函数

    全局操作函数或其组合。

    default

    全局操作函数

    默认的全局操作函数或其组合。没有条件满足时执行该操作。

  • 返回结果

    返回加工处理后的日志。

  • 函数示例
    1. 如果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
    2. 通过e_switch语法和e_output语法结合,将符合规则的日志投递到不同的Logstream。其中default=e_drop(),表示将不满足规则的日志丢弃,不做投递处理。若不设置default参数,则表示不满足规则日志都会被投递到配置的第一个Logstream中。

      output的加工结果不会显示到加工结果框中。

      • 测试数据
        {
        "__topic__": "sas-log-dns" ,
        "test": "aa" , 
        "__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())
  • 更多参考

    支持和其他函数组合使用。

相关文档