流程控制函数
本文主要介绍流程控制函数的语法规则,包括参数解释、函数示例等。
函数列表
函数 |
说明 |
---|---|
用于组合一系列操作。
支持和其他函数组合使用。 |
|
条件与操作组合。
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_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_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:字段值匹配后再进行操作。
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:根据字段值判断后再提取数据。
当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:高级判断后再进行操作。
- 测试数据
{ "valid":"failed" }
- 加工规则
e_if(op_eq(str_lower(v("valid")), "failed"), e_drop())
- 加工结果:丢弃日志
- 测试数据
- 示例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
- 测试数据
- 示例1:字段值匹配后再进行操作。
- 更多参考
支持和其他函数组合使用。
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
全局操作函数
否
默认的全局操作函数或其组合。没有条件满足时执行该操作。
- 返回结果
返回加工处理后的日志。
- 函数示例
- 如果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语法结合,将符合规则的日志投递到不同的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())
- 测试数据
- 如果content字段的值为123,则将__topic__字段的值设置为Number。如果data字段的值为123,则将__topic__字段的值设置为PRO。
- 更多参考
支持和其他函数组合使用。