本文主要介绍流程控制函数的语法规则,包括参数解释、函数示例等。
函数列表
函数 | 说明 |
用于组合一系列操作。
支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工。 | |
条件与操作组合。
例如,该加工规则相当于以下Python代码结构:
支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工。 | |
根据条件判断的结果进行对应操作。
例如,该加工规则相当于以下Python代码结构:
| |
条件与操作的组合。
例如,该加工规则相当于以下Python代码结构:
支持和其他函数组合使用。相关示例,请参见多目标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字段值为failed或failure时,设置__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字段的值为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")), 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数据分发。