- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 授权IAM用户使用云日志服务LTS
- 购买LTS资源包
- 日志管理
-
日志接入
- 日志接入概述
- 使用ICAgent插件采集日志
-
使用云服务接入LTS
- 云服务接入LTS概述
- 应用运维管理AOM接入LTS
- API网关APIG接入LTS
- Astro轻应用接入LTS
- 云堡垒机CBH接入LTS
- 内容分发网络CDN接入LTS
- 云防火墙CFW接入LTS
- 云审计服务CTS接入LTS
- 分布式缓存服务DCS接入LTS
- 文档数据库服务DDS接入LTS
- DDoS防护 AAD接入LTS
- 分布式消息服务Kafka版接入LTS
- 数据复制服务DRS接入LTS
- 数据仓库服务GaussDB(DWS)接入LTS
- 弹性负载均衡 ELB接入LTS
- 企业路由器ER接入LTS
- 函数工作流FunctionGraph接入LTS
- 云数据库GaussDB接入LTS
- 图引擎服务GES接入LTS
- 云数据库 TaurusDB接入LTS
- 云数据库GeminiDB接入LTS
- 云数据库GeminiDB Mongo接入LTS
- 云数据库GeminiDB Cassandra接入LTS
- 华为HiLens接入LTS
- 设备接入IoTDA接入LTS
- AI开发平台ModelArts接入LTS
- MapReduce服务MRS接入LTS
- 云数据库RDS for MySQL接入LTS
- 云数据库RDS for PostgreSQL接入LTS
- 云数据库RDS for SQLServer接入LTS
- 应用与数据集成平台ROMA Connect接入LTS
- 视频直播Live接入LTS
- 消息通知服务SMN接入LTS
- 安全云脑SecMaster接入LTS
- 对象存储服务OBS接入LTS(邀测)
- 虚拟私有云VPC接入LTS
- Web应用防火墙WAF接入LTS
- 使用API接入LTS
- 使用SDK接入LTS
- 跨IAM账号接入LTS
- 使用KAFKA协议上报日志到LTS
- 使用Flume采集器上报日志到LTS
- 使用匿名写入采集日志
- 自建中间件
- 日志搜索与分析(默认推荐)
- 日志搜索与分析(管道符方式-邀测)
- 日志可视化
- 日志告警
- 日志转储
- 日志消费与加工
- LTS配置中心管理
- 查看LTS审计事件
- 最佳实践
- 开发指南
- API参考
- SDK参考
- 场景代码示例
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
流程控制函数
本文主要介绍流程控制函数的语法规则,包括参数解释、函数示例等。
函数列表
函数 |
说明 |
---|---|
用于组合一系列操作。
支持和其他函数组合使用。 |
|
条件与操作组合。
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中。
- 测试数据
{ "__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。
- 更多参考
支持和其他函数组合使用。