有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

前提条件

已开通日志服务,创建源日志主题、并成功采集到日志数据。
已创建目标日志主题。建议目标日志主题为空主题,便于加工好的数据写入。
确保当前操作账号拥有配置数据加工任务的权限,参见 CLS 访问策略模板
注意:
数据加工只能处理实时日志流,不能处理历史日志。

操作步骤

指定目标日志主题
动态目标日志主题
1. 登录 日志服务控制台,在左侧导航栏中单击数据加工
2. 单击新建加工任务
3. 基本配置页面,填写相关配置项:
配置项
说明
任务名称
数据加工任务的名称
数据加工服务日志
打开之后,数据加工任务运行日志将写入cls_service_log日志主题(免费)、数据加工任务详情从该日志中获取任务监控的相关数据,如您关闭该选项,则不能查看加工任务的详情。
源日志主题
数据加工任务的输入,在控制台选择您的源日志主题,1个
目标日志主题
数据加工任务的输出,选择固定日志主题,然后添加您的目标日志主题,最多30个
目标名称
目标主题的别名 Alias,建议使用英文,一是提高目标主题的可读性(业务属性),二是在分流场景下,在加工函数 log_output("Alias")中需要使用该名称。
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. 基本配置页面,填写相关配置项:
配置项
说明
任务名称
数据加工任务的名称
数据加工服务日志
打开之后,数据加工任务运行日志将写入cls_service_log日志主题(免费)、数据加工任务详情从该日志中获取任务监控的相关数据,如您关闭该选项,则不能查看加工任务的详情。
源日志主题
数据加工任务的输入,在控制台选择您的源日志主题,1个
目标日志主题
数据加工任务的输出,选择动态日志主题
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 的数据是同一套,不是实时数据,建议把老任务已经生成的日志集和日志主题也删掉。