本文档主要介绍流程控制函数的语法规则,包括参数解释、函数示例等。
函数列表
函数 | 说明 |
---|---|
e_compose | 用于组合一系列操作。
|
e_if | 条件与操作组合。
|
e_if_else | 根据条件判断的结果进行对应操作。 |
e_switch | 条件与操作的组合。
|
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
时,设置日志主题为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") )
- 示例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")), 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())
- 如果