坦白讲,大多数数据处理场景下,单纯靠几个固定函数就想搞定所有需求,基本没戏。真正要应对复杂多变的日志、业务数据,最终都得回到“编排”这件事上。说白了,就是得有一套足够灵活的机制,让你能像搭积木一样,把各种处理逻辑组合起来。
自由编排
数据加工的核心在于编排。通过一套兼容Python的ETL语言,你可以把各种逻辑进行灵活组合,满足绝大多数数据加工的个性化需求。举个例子,想实现一个复杂的加工链路,只需要按顺序编排几步操作就行。

完整的加工功能
系统内置了近30种全局步骤函数。这些函数不只是简单的动作,它们能调节行为参数,还能接受其他表达式函数的运算结果作为输入。这种嵌套调用的能力,才是真正拉开差距的地方。
具体来看,功能覆盖了这几个维度:
- 控制:支持基于条件判断的流程分支,比如 if-else、if条件-操作配对、switch分派、compose组合。配合e_search这样的搜索语法,不同格式的日志都能灵活处理。
- 事件操作:可以随意对事件进行丢弃、保留、分裂、输出、复制等操作。
- 字段操作:支持保留、删除、重命名字段,随心所欲。
- 字段赋值:能基于任意表达式组合的结果来设置字段的值,自由度高。
- 字段值提取:支持正则、GROK、KV、CSV、TSV、PSV、syslog等多种方式提取字段中的值或键值对。JSON提取和展开也提供了完整的方案。
- 字段富化:这是很强的一块。支持基于字典、表格进行映射或搜索,尤其是搜索表格的映射方式,能力突出。富化信息可以从规则配置、OSS、RDS、Logstore等外部资源获取,并且支持全量、增量或改动日志的自动刷新。
灵活的函数库
目前提供了近200个内置的表达式函数,用于转换事件或控制全局函数的行为。这个数量基本覆盖了主流的数据加工需求,具体包括:
- 事件搜索:类似Lucene语法的条件过滤机制,支持正则、字符串、泛字符、数值比较、and/or/not组合。
- 基本操作:字段取值、控制、比较、容器判断、多字段操作等。
- 转换函数:基础类型转换、数字转换、字典和列表操作。
- 算术函数:基础计算、多值计算、数学计算、数学参数等。
- 字符串函数:多字段操作、编码/解码、排序、替换、规整、查找、切分、格式化、字符集判断等。
- 日期时间函数:智能转换、获取属性、格式化、修改、比较等。
- 正则函数:字段提取、匹配判断、替换、切分。
- GROK支持:支持模式替换,提供400种内置模式。
- JSON与XML:提取、过滤等。
- Protobuf:支持基于配置进行格式转换与提取。
- 编解码:SHA1/256/512、MD5、HTML、URL、Base64等。
支持动态分发
实际业务中,数据不一定都流向同一个地方。系统支持根据业务需求,将数据按特定逻辑分发到不同的目标Logstore。更灵活的是,目标Logstore的名称可以是动态计算的,甚至是从外部第三方获取的。
支持灵活富化
富化数据的来源同样丰富。数据可以从本地资源、外部资源(OSS、RDS、日志服务Logstore)获取,支持从字典、表格的常规映射,到搜索表格的复杂映射。外部资源的加载还支持自动刷新和快照机制。
支持自定义UDF扩展
内置的200个函数基本够用,但如果遇到特殊场景,也能通过提交工单获得支持。另一方面,底层采用Python引擎,理论上任何Python库稍加包装就能接入。自定义UDF功能目前尚未全面开放,需要提工单申请。
进一步参考
如果想深入了解,可以参考以下内容:
- 日志服务最佳实践汇总(持续更新)
- 完整DSL语法介绍与参考(持续更新)
- 数据加工指南
介绍: 功能概述、概念原理
快速开始: 快速开始(SLB日志加工实战)、控制台操作、源与目标、访问秘钥配置、作业诊断指南、性能指南、成本优化指南
语法: DSL语法介绍、查询字符串语法、JMES语法介绍
管理配置: 子账号授权配置
