1. 为什么使用dataworks投递数据
日志服务提供了多种投递数据的方式,如: 在控制台直接配置投递任务,通过消费组获取数据然后再投递,以及使用dataworks配置投递任务等方式。
控制台直接投递配置方式与dataworks类似,不过配置项更少,更容易操作。消费组方式是先将数据通过消费组拖拽到本地,之后再调用MaxComputer的写入接口完成投递,相比较另外两种在页面上配置任务的方式更加复杂。
复杂度 | 投递系统字段 | 是否能够投递历史数据 | 周期设置 | 跨region投递 | |
---|---|---|---|---|---|
直接投递 | 低 | 不支持 | 不支持 | 30或60分钟 | 不支持 |
dataworks投递 | 高 | 支持 | 支持 | 5分钟 -- 1月 | 支持 |
消费组投递 | 非常高 | 支持 | 支持 | 实时 | 支持 |
参考如上表格内容,使用dataworks进行日志投递功能比较强大,而且配置比较方便。
2. 投递流程
2.1 总览
首先,需要确定日志服务中存在可供投递的数据;
然后,在dataworks中创建工作空间,以及日志服务、MaxComputer的数据源;
在MaxComputer中创建目标表;
最后创建投递任务、配置周期任务参数。
2.2 详细步骤
2.2.1 创建LogHub数据源
配置中需要指定project、endpoint等信息,由于日志服务是不区分环境的,所以可以同时创建dataworks中开发、生产两个环境的数据源。
配置完成之后点击测试连通性,出现弹窗测试连通性成功,则表示可以在dataworks使用了,如果有其他报错,根据具体的报错信息修改配置信息。
2.2.2 创建MaxComputer目标表
如图,需要创建分区表。由于日志服务中字段存储多为text类型,所以目标表字段类型建议设置为String;
测试字段如下:
2.2.3 投递任务及字段映射
下图中配置的开始、结束时间是测试时使用的,也可以将日志服务中的历史数据导入到odps中。
投递配置中日志服务系统字段的映射情况如下图,__tag__:开头的字段使用冒号后面的内容,__time__、__source__、__topic__则分别使用C_LogTime、C_Source、C_Topic代替。其他业务字段不变。
日志服务中的数据:
投递到maxComputer之后的效果如下图,日志服务中没有的字段投递过来之后值为N 空的意思,下图进行折叠:
2.2.4 周期任务参数示例
下图中设置了三个参数,分别是日志开始时间、结束时间、分区信息。
赋值: -p"startTime=$[yyyymmddHH24 - 1/24] endTime=$[yyyymmddHH24] dt=$[yyyymmddHH24 - 1/24]"
参数的配置可以参考文档。
参数中运算的 - 1/24 是将当前运行任务时间减去1小时,所以配置下面的调度周期间隔改为了1小时。
配置完成之后保存、提交即可。
2.3 投递配置周期参数
2.3.1 参数含义
该文档介绍周期任务中常用的两个参数 $bizdate( ${…} )
以及 $cyctime( $[…] )
。$bizdate( ${…} )
是调度时间,精确度为天,假如任务是2020-02-20执行,调度时间就是 2020-02-19 ,比任务执行时间提前一天;例: ${yyyymmdd}
$cyctime($[…])
是任务执行时间,精确度为秒,是定时任务理论上执行的时间,假如由于任务较多导致延迟,依然按照定时时间,而不是真实的运行时间测算;例: $[yyyymmddhh24miss]
2.3.2 示例
例如,当前时间为2020年2月20日,任务定时每天00:00运行,下表为各自定义参数赋值情况的对比。
参数类型 | 调度参数赋值 | 调度替换值 |
---|---|---|
${yyyymmdd} | datetime1=${yyyymmdd} |
datetime1=20200219 |
$[yyyymmddhh24miss] | datetime2=$[yyyymmddhh24miss] |
datetime2=20200220000000 |
2.3.3 注意事项
dataworks 周期参数中不支持空格,如果有空格需要设置两个变量,投递配置中使用空格将两个参数隔开;$bizdate(${…})
和 $cyctime($[…])
在计算周期范围时,参数内部运算时的数值不同。
2.4 常见问题
2.4.1 投递后数据为空常见原因
- 检查原始数据中是否存在该字段(只能投递日志服务中的字段,不支持json嵌套字段投递)
- 日志服务的字段名称填写是否正确
- MaxComputer侧的字段类型是否正确,日志服务中类型与MaxComputer不一样,所以建议在MaxComputer中创建String类型字段重新投递