使用非常简单。用户只需要完成2步配置即可以把日志服务logstore的日志数据迁移到maxcompute中。
避免重复收集工作。由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到maxcompute。
充分复用日志服务内的日志分类管理工作。用户可让日志服务中不同类型的日志(存在不同logstore中)、不同project的日志自动投递到不同的maxcompute表格,方便管理及分析maxcompute内的日志数据。
在大部分情况下日志数据在写入logstore后的0.5~1个小时导入到maxcompute,用户可以在控制台“投递任务管理”查看导入状态。导入成功后用户即可在maxcompute内查看到相关日志数据。
结合日志服务的实时消费,投递日志数据到maxcompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。
举例日志服务的一条日志如下:
日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。

如上图,填写账号的阿里云ak信息,勾选自动开通项,点击确定,初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务maxcompute(原odps),将直接跳过该步骤。
目前暂不支持子用户来投递大数据计算服务maxcompute(原odps)。
将样例日志导入maxcompute,分别定义maxcompute数据列、分区列与日志服务字段的映射关系:
maxcompute列类型
maxcompute列名(可自定义)
maxcompute列类型(可自定义)
日志服务字段名(投递配置里填写)
日志服务字段类型
日志服务字段语义
数据列
log_source
string
__source__
系统保留字段
日志来源的机器ip
log_time
bigint
__time__
日志的unix时间戳(是从1970年1月1日开始所经过的秒数),由用户日志的time字段计算得到
log_topic
__topic__
日志主题
time
日志内容字段
解析自日志
ip
thread
log_extract_others
__extract_others__
未在配置中进行映射的其它日志内字段会通过key-value序列化到json,该json是一层结构,不支持字段内部json嵌套。
分区列
log_partition_time
__partition_time__
由日志的time字段对齐计算而得,分区粒度可配置,在配置项部分详述。
status
解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。
maxcompute表至少包含一个数据列、一个分区列。 系统保留字段中建议使用__partition_time__,__source__,__topic__。 maxcompute单表有分区数目6万的限制,分区数超出后无法再写入数据,所以日志服务导入maxcompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段__extract_others__历史上曾用名_extract_others_,填写后者也是兼容的。 maxcompute分区列的值不支持”/“等特殊字符,这些是maxcompute的保留字段。 maxcompute分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。
配置好ak后进入到投递配置页面,在该页面需要配置投递大数据计算服务maxcompute(原odps)的相关内容:
选项含义:
参数
语义
投递名称
自定义一个投递的名称,方便后续管理
maxcompute project
maxcompute项目名称,该项默认为新创建的project,如果已经是maxcompute老客户,可以下拉选择已创建其他project
maxcompute table
maxcompute表名称,请输入自定义的新建的maxcompute表名称或者选择已有的maxcompute表
maxcompute 普通列
按序,左边填写与maxcompute表数据列相映射的日志服务字段名称,右边填写或选择maxcompute表的普通字段名称及字段类型
maxcompute 分区列
按序,左边填写与maxcompute表分区列相映射的日志服务字段名称,右边填写或选择maxcompute表的普通字段名称及字段类型
分区时间格式
导入maxcompute间隔
maxcompute数据投递间隔,默认1800,单位:秒
该步会默认为客户创建好新的maxcompute project和table,其中如果已经是maxcompute老客户,可以下拉选择其他已创建project。 日志服务投递maxcompute功能按照字段与列的顺序进行映射,修改maxcompute表列名不影响数据导入,如更改maxcompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个maxcompute表的列(数据列或分区列),不支持字段冗余。
__partition_time__ 格式
将日志时间作为分区字段,通过日期来筛选数据是maxcompute常见的过滤数据方法。
日志服务根据日志time字段和分区时间格式计算出日期作为分区列,且为满足maxcompute单表分区数目的限制,日期分区列的值会按照导入maxcompute间隔对齐。
举例来说,日志提取的time字段是”27/jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(unix时间戳),不同配置下的时间分区列取值如下:
1800
yyyy_mm_dd_hh_mm_00
2016_01_27_20_30_00
yyyy-mm-dd hh:mm
2016-01-27 20:30
yyyymmdd
20160127
3600
yyyymmddhhmm
201601272000
yyyy_mm_dd_hh
2016_01_27_20
请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。
在logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务maxcompute(原odps)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。
如果投递任务出现错误,控制台上会显示相应的错误信息:
错误信息
建议方案
maxcompute项目空间不存在
在maxcompute控制台中确认配置的maxcompute项目是否存在,如果不存在则需要重新创建或配置。
maxcompute表不存在
在maxcompute控制台中确认配置的maxcompute表是否存在,如果不存在则需要重新创建或配置。
maxcompute项目空间或表没有向日志服务授权
在maxcompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。
maxcompute错误
显示投递任务收到的maxcompute错误,请参考maxcompute相关文档或联系maxcompute团队解决。日志服务会自动重试最近两天时间的失败任务。
日志服务导入字段配置无法匹配maxcompute表的列
重新配置maxcompute表格的列与日志服务数据字段的映射配置。
当投递任务发生错误时,请查看错误信息,问题解决后可以通过管理控制台中“日志投递任务管理”或sdk来重试失败任务。
maxcompute用户表中示例数据如下:
使用maxcompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据:
log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询:
示例供参考,请以maxcompute产品建议为最终标准。
如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。
在odps项目空间下添加用户:
[email protected] 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到odps
odps项目空间read/list权限授予:
odps项目空间的表describe/alter/update权限授予:
确认odps授权是否成功: