You need to enable JavaScript to run this app.
导航

加工原理

最近更新时间2023.11.13 16:31:36

首次发布时间2023.03.09 11:16:15

日志服务提供的数据加工功能通过消费组对源日志主题中的日志数据进行消费。数据加工功能可以自动编译指定的 DSL 语句,解析为数据加工规则,并调用此规则对日志数据进行加工与处理,再通过日志写入的 API 接口将加工后的日志数据写入到指定的日志主题中。本文档介绍加工任务的调度原理和加工规则的工作原理。

调度原理

数据加工功能通过协同消费组对源日志主题的日志数据进行流式消费,每个加工任务对应一个消费者组,每个消费者组下启动一个或多个消费者,消费者对消费到的日志数据进行加工处理。每个消费者消费一个或多个源日志主题的 Shard,最多启动与源日志主题读写 Shard 数量相同的消费者。
图片

加工规则原理

日志服务支持使用 TLS DSL 提供的内置函数编写加工规则。加工规则中每个语句表示一个加工环节,规则引擎按语句的先后顺序依次执行每个加工环节。例如以下 4 个语句从前到后定义了 4 个环节。

f_set("user_type", "normal")
f_drop("content")
c_if(f_has("inner_user"), f_set("user_source", "inner"))
c_if(op_eq(v("user_city"), "chengdu"), e_output("target"))

对应逻辑图:
图片

规则

说明

基本逻辑

日志服务按照顺序执行规则中定义的每个语句,并根据语义顺序处理语句中的每个函数。每个函数在执行时对日志事件做修改,并返回处理后的事件。
例如 f_set("user_type", "normal") 会为每个事件添加一个值为 normal 的字段 user_type,下一个函数接收到的事件就是新增字段 user_type 后的事件。

条件判断

数据加工规则支持为每个环节设置条件,满足条件的事件才会启动对应的函数执行环节。
例如语句 c_if(f_has("inner_user"), f_set("user_source", "inner")),日志服务会首先检查字段 inner_user 是否存在,不存在不会做任何操作;如果存在,则会新增字段 user_source,并设置字段值为 inner

输出

满足指定条件则输出数据,不满足条件则不做任何处理,后续若无其它规则处理则删除日志事件。
例如 c_if(op_eq(v("user_city"), "chengdu"), e_output("target")),如果字段 user_city 的值是 chengdu,则输出该事件到别名为 target 的日志主题。