前提条件
已开通日志服务,创建源日志主题、并成功采集到日志数据。
已创建目标日志主题。建议目标日志主题为空主题,便于加工好的数据写入。
确保当前操作账号拥有配置数据加工任务的权限,参见 CLS 访问策略模板。
注意
数据加工只能处理实时日志流,不能处理历史日志。
操作步骤
1. 登录 日志服务控制台,在左侧导航栏中单击数据加工。
2. 单击新建加工任务。
3. 在基本信息页面,填写相关配置项:
任务名称 | 数据加工任务的名称 |
源日志主题 | 数据加工任务的输入,在控制台选择您的源日志主题,1个 |
目标日志主题 | 数据加工任务的输出,在控制台选择您的目标日志主题,最多30个 |
目标名称 | 目标主题的别名,一是提高目标主题的可读性(业务属性),二是在加工函数 log_output("别名")中使用 |
4. 单击下一步。
5. 在编辑加工语句页面,进行如下操作:
5.1 您可以使用原始日志或测试数据对 DSL 语句进行调试。
原始日志:系统会自动加载原始日志数据,默认100条。
测试数据:由于系统随机加载的原始数据,可能无法满足您的调试需求,那么您可在原始数据页签,单击加入测试数据,将原始日志加入到测试数据中。然后在测试数据页签,修改这些数据,使其满足您的调试需求,然后使用调整过的数据进行 DSL 语句的测试。

5.2 查看加工函数说明和示例。您可以将示例复制/粘贴到加工语句的编辑框中,修改对应的参数,完成 DSL 函数的编写;也可以参见 加工实战案例 文档,帮助您更快地理解 DSL 函数的编写。


5.3 完成 DSL 加工语句的编写后,单击执行预览或者断点调试,运行和调试 DSL 函数。运行结果会在右下方展示,您可以针对运行结果,调整 DSL 语句,直到满足您的需求。
5.4 单击确定,提交数据加工任务。
适用场景
动态创建日志主题适用于目标日志主题暂不能确定的场景。例如:您需要根据日志字段"pd"的值,动态创建多个目标日志主题,并将对应的日志分发至目标日志主题。假设 pd 的值为"CLB "、"Ckafka"、"COS"、"CDN",将会动态创建出名为"CLB "、"Ckafka"、"COS"、"CDN"的目标日志主题,同时,您可对这些新建主题的索引类型、存储周期进行配置。
操作步骤
新建任务
1. 登录 日志服务控制台,在左侧导航栏中单击数据加工。
2. 单击新建加工任务。
3. 在基本信息页面,完成相关配置,其中目标日志主题需选择动态创建。

4. 配置超限处理。当您的数据加工任务生成的主题个数超出了 产品规格,您可以选择:
创建兜底日志集、日志主题并将日志写入兜底主题。
兜底日志集:auto_undertake_logset,单地域单账号下一个;
兜底日志主题:auto_undertake_topic_$(数据加工任务名称),例如用户创建了两个数据加工任务 etl_A 和 etl_B,那么会产生两个兜底主题:auto_undertake_topic_etl_A、auto_undertake_topic_etl_B。
丢弃日志数据:不创建兜底主题,直接丢弃日志。
5. 单击下一步,进入加工语句编辑。
注意:
兜底日志集和兜底主题将会在创建数据加工任务的同时创建。
6. 编写语句
根据如下日志中"pd"字段的值,自动生成日志主题,并开启全文索引,日志主题的保存时间长度为30天。
原始日志数据
[{"pd": "CLB","dateTime": "2023-05-25T00:00:26.579"},{"pd": "Ckafka","time": "2023-05-25T18:00:55.350+08:00"},{"pd": "COS","time": "2023-05-25T00:06:20.314+08:00"},{"pd": "CDN","time": "2023-05-25T00:03:52.051+08:00"}]
数据加工语句
log_auto_output(v("pd"),"我的日志集",index_options="content_index", period=3)
预览结果
自动生成了四个日志主题,分别是"CLB "、"Ckafka"、"COS"和"CDN",日志集名称为"我的日志集",如下图所示:

log_auto_output( )函数参数
参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数 默认值 | 参数说明 |
topic_name | 日志主题名称 | string | y | - | 参数 topic_name 中包含"|","|"将在生成的主题名称中被去除; 参数 topic_name 长度超出250字符,生成的日志主题名称仅有前250个字符,超出的会被截断。 |
logset_name | 日志集名称 | string | y | - | - |
index_options | all_index:开启键值、全文索引 no_index:不开启索引 content_index:开启全文 key_index:开启键值索引 | string | n | all_index | 如果storage_type=cold,即低频存储,则all_index和key_index不会生效,即低频存储不支持键值索引 |
period | 存储周期,一般取值范围是1 - 3600 天, 3640 代表永久存储 | number | n | 30 | 1 - 3600 天 |
storage_type | 日志主题的存储类型,可选值 hot:标准存储 cold:低频存储 | string | n | hot | 当为 cold 时,period 最小为 7 天 |
hot_period | 0:关闭日志沉降 非0:开启日志沉降后标准存储的天数 HotPeriod 需要大于等于7,且小于 Period,仅在 StorageType 为 hot 时生效 | number | n | 0 | - |
tag_dynamic | 为日志主题添加动态标签,和 extract_tag() 函数配合使用,用于从日志字段中提取标签的 KV,例如:tag_dynamic=extract_tag(v("pd"),v("env"),v("team"), v("person")) | string | n | - | 和 tag_static 一起不超过10对标签 |
tag_static | 为日志主题添加静态标签,例如:tag_static="Ckafka:test_env,developer_team:MikeWang" | string | n | - | 和 tag_dynamic 一起不超过10对标签 |
特殊情况处理
创建日志主题
特殊场景 | 处理逻辑 |
参数 topic_name 获取失败或者为""(空字符串),该行日志将进入名称为"null"的日志主题 | 例如指定 app 字段的值为 topicname,即日志主题名称,但某行日志中没有 app 字段,或者其值为" ",那么该行日志将写入名称为"null"的日志主题,"null"主题所属日志集,是本函数的日志集参数中指定的日志集。 说明: 如果您使用了字符串拼接来指定日志主题名称,例如 log_auto_output( str_join("-", "myprefix", v("app")), " mylogset ",period=14,storage_type="hot",hot_period=10),那么当 app 不存在或者值为""时,日志将写入名称为"myprefix"的日志主题。 |
重名主题(同一日志集下) | 已存在名为"Nginx"的日志主题,动态创建任务根据规则,也要创建名为"Nginx"的日志主题时,会加上 "CreateByCLSETL" 后缀,创建出的日志主题名为" Nginx-CreateByETL"。 |
创建日志集
特殊场景 | 处理逻辑 |
重名日志集(同一地域) | 如您手动创建名为"mylogset"的日志集,动态创建任务根据函数规则也要创建名为"mylogset"的日志集时,会自动加上 CreateByCLSETL 为后缀。 如果自动创建任务1 创建出来的日志集名称为"mylogset",自动创建任务2同样定义了日志集名称为"mylogset",此时自动创建任务2会使用同一个日志集名称"mylogset"作为目标日志集,即不会再自动创建带有 CreateByCLSETL 后缀的日志集。 |
注意:
日志集和日志主题名称,不区分英文大小写,abc 和 Abc 在 CLS 侧代表同一个资源。
日志主题添加标签
特殊场景 | 处理逻辑 |
动态标签的 KV 值获取失败 | 例如指定 A 字段的值为标签的 Key,B 字段的值为标签的 Value,但某行日志没有 A 字段或者 B 字段,或者 A 字段 B 字段的值为空,标签添加失败。 |
标签的 KV 值前后有空格 | 标签添加失败。 |
动态标签和静态标签的总数超过10对 | 动态标签优先级较高,如添加完动态标签后,还不足10对,补充静态标签,但总个数不超过10对。 |
标签 KV 的长度超出限制 | 标签的 key 长度大于127,value 的长度大于255,标签添加失败。 |
注意:
修改 log_auto_output() 函数中的参数,并重启任务之后,仅对新生成的主题生效,已生成的主题不受影响。如您需要对已经生成日志集、日志主题进行修改,请前往 日志主题列表 控制台或调用 API 进行修改。
在不修改 log_auto_output 函数的前提下,您修改数据加工任务动态创建的主题名称、兜底日志集名称、兜底日志主题名称之后,数据分发逻辑不受影响。例如加工任务已动态创建日志主题"Nginx",您将其改名为"Nginx001",数据还是会写入这个"Nginx001"主题,而不会新创建一个叫做"Nginx"的日志主题。
删除数据加工任务(动态创建主题),不会删除已创建的日志集和日志主题。
说明:
如果您在 POC 时需要反复重建同名加工任务,其流程如下:
先删除老的数据加工任务,否则还会持续生成日志主题;
删除兜底主题 auto_undertake_topic_${etl-task-name} ,如果连续3次创建同名任务,超限兜底主题会创建失败,进而阻塞任务正常启动;
如果 POC 的数据是同一套,不是实时数据,建议把老任务已经生成的日志集和日志主题也删掉。