• 关于

    保留字符常见问题及解决方法

    的搜索结果

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:18 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 投递日志到 MaxCompute 是日志服务的一个功能,能够帮助您最大化数据价值。您可以自己决定对某个日志库是否启用该功能。一旦启用该功能,日志服务后台会定时把写入到该日志库内的日志投递到 MaxCompute 对应的表格中。 使用限制 数加控制台创建、修改投递配置必须由主账号完成,不支持子账号操作。 投递MaxCompute是批量任务,请谨慎设置分区列:保证一个同步任务内处理的数据分区数小于512个;用作分区列的字段值不能包括/等MaxCompute保留字段 。配置细节请参考下文投递配置说明。 不支持海外Region的MaxCompute投递,海外Region的MaxCompute请使用dataworks进行数据同步。国内Region投递支持如下: 日志服务Region MaxCompute Region 华北1 华东2 华北2 华北2、华东2 华北3 华东2 华北5 华东2 华东1 华东2 华东2 华东2 华南1 华南1、华东2 香港 华东2 功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势: 使用便捷 您只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。 避免重复收集工作 由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。 充分复用日志服务内的日志分类管理工作 用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。 说明 一般情况下日志数据在写入Logstore后的1个小时导入到MaxCompute,您可以在控制台投递任务管理查看导入状态。导入成功后即可在MaxCompute内查看到相关日志数据。判断数据是否已完全投递请参考文档。 结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。 配置流程 举例日志服务的一条日志如下: 16年01月27日20时50分13秒 10.10.*.* ip:10.10.*.* status:200 thread:414579208 time:27/Jan/2016:20:50:13 +0800 url:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1 user-agent:aliyun-sdk-java 日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。 步骤1 初始化数加平台 在日志服务的控制台Logstore列表单击日志投递列的MaxCompute。 自动跳转到初始化数加平台的页面。MaxCompute默认为按量付费模式,具体参见MaxCompute文档说明。 查看服务协议和条款后单击确定,初始化数加平台。 初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。 步骤2 数据模型映射在日志服务和大数据计算服务MaxCompute(原ODPS)之间同步数据,涉及两个服务的数据模型映射问题。您可以参考日志服务日志数据结构了解数据结构。 将样例日志导入MaxCompute,分别定义MaxCompute数据列、分区列与日志服务字段的映射关系: MaxCompute 列类型 MaxCompute 列名(可自定义) MaxCompute 列类型(可自定义) 日志服务字段名(投递配置里填写) 日志服务字段类型 日志服务字段语义 数据列 log_source string __source__ 系统保留字段 日志来源的机器 IP。 log_time bigint __time__ 系统保留字段 日志的 Unix 时间戳(是从1970 年 1 月 1 日开始所经过的秒数),由用户日志的 time 字段计算得到。 log_topic string __topic__ 系统保留字段 日志主题。 time string time 日志内容字段 解析自日志。 ip string ip 日志内容字段 解析自日志。 thread string thread 日志内容字段 解析自日志。 log_extract_others string __extract_others__ 系统保留字段 未在配置中进行映射的其他日志内字段会通过 key-value 序列化到json,该 json 是一层结构,不支持字段内部 json 嵌套。 分区列 log_partition_time string __partition_time__ 系统保留字段 由日志的 time 字段对齐计算而得,分区粒度可配置,在配置项部分详述。 status string status 日志内容字段 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 MaxCompute 表至少包含一个数据列、一个分区列。 系统保留字段中建议使用 __partition_time__,__source__,__topic__。 MaxCompute 单表有分区数目 6 万的限制,分区数超出后无法再写入数据,所以日志服务导入 MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。 系统保留字段 __extract_others__ 历史上曾用名 _extract_others_,填写后者也是兼容的。 MaxCompute 分区列的值不支持”/“等特殊字符,这些是 MaxCompute 的保留字段。 MaxCompute 分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。 步骤3 配置投递规则 开启投递。 初始化数加平台之后,根据页面提示进入LogHub —— 数据投递页面,选择需要投递的Logstore,并单击开启投递。 您也可以在MaxCompute(原ODPS)投递管理页面选择需要投递的Logstore,并单击开启投递以进入LogHub —— 数据投递页面。 图 1. 开启投递 配置投递规则。 在 LogHub —— 数据投递页面配置 字段关联等相关内容。 图 2. 配置投递规则 配置项含义: 参数 语义 投递名称 自定义一个投递的名称,方便后续管理。 MaxCompute Project MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project。 MaxCompute Table MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表。 MaxCompute 普通列 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 MaxCompute 分区列 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型。 分区时间格式 __partition_time__输出的日期格式,参考 Java SimpleDateFormat。 导入MaxCompute间隔 MaxCompute数据投递间隔,默认1800,单位:秒。 该步会默认为客户创建好新的MaxCompute Project和Table,其中如果已经是MaxCompute老客户,可以下拉选择其他已创建Project。 日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。 日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。 参考信息 __partition_time__ 格式 将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。 __partition_time__ 是根据日志time字段值计算得到(不是日志写入服务端时间,也不是日志投递时间),结合分区时间格式,向下取整(为避免触发MaxCompute单表分区数目的限制,日期分区列的值会按照导入MaxCompute间隔对齐)计算出日期作为分区列。 举例来说,日志提取的time字段是“27/Jan/2016:20:50:13 +0800”,日志服务据此计算出保留字段__time__为1453899013(Unix时间戳),不同配置下的时间分区列取值如下: 导入MaxCompute间隔 分区时间格式 __partition_time__ 1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00 1800 yyyy-MM-dd HH:mm 2016-01-27 20:30 1800 yyyyMMdd 20160127 3600 yyyyMMddHHmm 201601272000 3600 yyyy_MM_dd_HH 2016_01_27_20 请勿使用精确到秒的日期格式:1. 很容易导致单表的分区数目超过限制(6万);2. 单次投递任务的数据分区数目必须在512以内。 以上分区时间格式是测试通过的样例,您也可以参考Java SimpleDateFormat自己定义日期格式,但是该格式不得包含斜线字符”/“(这是MaxCompute的保留字段)。 __partition_time__ 使用方法 使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据: select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27"; __extract_others__使用方法 log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询: select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10; 说明 get_json_object是MaxCompute提供的标准UDF。请联系MaxCompute团队开通使用该标准UDF的权限。 示例供参考,请以MaxCompute产品建议为最终标准。 其他操作 编辑投递配置 在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。 投递任务管理 在启动投递功能后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考管理日志投递任务。 如果投递任务出现错误,控制台上会显示相应的错误信息: 错误信息 建议方案 MaxCompute项目空间不存在 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 MaxCompute表不存在 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 MaxCompute项目空间或表没有向日志服务授权 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 MaxCompute错误 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 日志服务导入字段配置无法匹配MaxCompute表的列 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 当投递任务发生错误时,请查看错误信息,问题解决后可以通过云控制台中“日志投递任务管理”或SDK来重试失败任务。 MaxCompute中消费日志 MaxCompute用户表中示例数据如下: | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ 同时,我们推荐您直接使用已经与MaxCompute绑定的大数据开发Data IDE来进行可视化的BI分析及数据挖掘,这将提高数据加工的效率。 授予MaxCompute数据投递权限 如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。 在MaxCompute项目空间下添加用户: ADD USER aliyun$shennong_open@aliyun.com; shennong_open@aliyun.com 是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到MaxCompute MaxCompute项目空间Read/List权限授予: GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com; MaxCompute项目空间的表Describe/Alter/Update权限授予: GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com; 确认MaxCompute授权是否成功: SHOW GRANTS FOR aliyun$shennong_open@aliyun.com; A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
2019-12-01 23:11:16 0 浏览量 回答数 0

问题

投递日志到MaxCompute有什么意义?

功能优势 日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数...
轩墨 2019-12-01 21:57:02 1275 浏览量 回答数 0

问题

MaxCompute百问集锦(持续更新20171011)

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效...
隐林 2019-12-01 20:19:23 38430 浏览量 回答数 18

回答

回 2楼(zc_0101) 的帖子 您好,       您的问题非常好,SQL SERVER提供了很多关于I/O压力的性能计数器,请选择性能计算器PhysicalDisk(LogicalDisk),根据我们的经验,如下指标的阈值可以帮助你判断IO是否存在压力: 1.  % Disk Time :这个是磁盘时间百分比,这个平均值应该在85%以下 2.  Current Disk Queue Length:未完成磁盘请求数量,这个每个磁盘平均值应该小于2. 3.  Avg. Disk Queue Length:磁盘请求队列的平均长度,这个每个磁盘平均值也应该小于2 4.  Disk Transfers/sec:每次磁盘传输数量,这个每个磁盘的最大值应该小于100 5.  Disk Bytes/sec:每次磁盘传入字节数,这个在普通的磁盘上应该在10M左右 6.  Avg. Disk Sec/Read:从磁盘读取的平均时间,这个平均值应该小于10ms(毫秒) 7.  Avg. Disk Sec/Write:磁盘写入的平均时间,这个平均值也应该小于10ms(毫秒) 以上,请根据自己的磁盘系统判断,比如传统的机械臂磁盘和SSD有所不同。 一般磁盘的优化方向是: 1. 硬件优化:比如使用更合理的RAID阵列,使用更快的磁盘驱动器,添加更多的内存 2. 数据库设置优化:比如创建多个文件和文件组,表的INDEX和数据放到不同的DISK上,将数据库的日志放到单独的物理驱动器,使用分区表 3. 数据库应用优化:包括应用程序的设计,SQL语句的调整,表的设计的合理性,INDEX创建的合理性,涉及的范围很广 希望对您有所帮助,谢谢! ------------------------- 回 3楼(鹰舞) 的帖子 您好,      根据您的描述,由于查询产生了副本REDO LOG延迟,出现了架构锁。我们知道SQL SERVER 2012 AlwaysOn在某些数据库行为上有较多变化。我们先看看架构锁: 架构锁分成两类: 1. SCH-M:架构更改锁,主要发生在数据库SCHEMA的修改上,从你的描述看,没有更改SCHEMA,那么可以排除这个因素 2. SCH-S:架构稳定锁,主要发生在数据库的查询编译等活动 根据你的情况,应该属于SCH-S导致的。查询编译活动主要发生有新增加了INDEX, 更新了统计信息,未参数化的SQL语句等等 对于INDEX和SQL语句方面应,我想应该不会有太多问题。 我们重点关注一下统计信息:SQL SERVER 2012 AG副本的统计信息维护有两种: 1. 主体下发到副本 2. 临时统计信息存储在TEMPDB 对于主体下发的,我们可以设置统计信息的更新行为,自动更新时,可以设置为异步的(自动更新统计信息必须首先打开): USE [master] GO ALTER DATABASE [Test_01]     SET AUTO_UPDATE_STATISTICS_ASYNC ON WITH NO_WAIT GO 这样的话查询优化器不等待统计信息更新完成即编译查询。可以优化一下你的BLOCK。 对于临时统计信息存储在TEMPDB里面也是很重要的,再加上ALWAYSON的副本数据库默认是快照隔离,优化TEMPDB也是必要的,关于优化TEPDB这个我想大部分都知道,这里只是提醒一下。 除了从统计信息本身来解决,在查询过程中,可以降低查询的时间,以尽量减少LOCK的时间和范围,这需要优化你的SQL语句或者应用程序。 以上,希望对您有所帮助。谢谢! ------------------------- 回 4楼(leamonjxl) 的帖子 这是一个关于死锁的问题,为了能够提供帮助一些。请根据下列建议进行: 1.    跟踪死锁 2.    分析死锁链和原因 3.    一些解决办法 关于跟踪死锁,我们首先需要打开1222标记,例如DBCC TRACEON(1222,-1), 他将收集的信息写入到死锁事件发生的服务器上的日志文件中。同时建议打开Profiler的跟踪信息: 如果发生了死锁,需要分析死锁发生的根源在哪里?我们不是很清楚你的具体发生死锁的形态是怎么样的。 关于死锁的实例也多,这里不再举例。 这里只是提出一些可以解决的思路: 1.    减少锁的争用 2.    减少资源的访问数 3.    按照相同的时间顺序访问资源 减少锁的争用,可以从几个方面入手 1.    使用锁提示,比如为查询语句添加WITH (NOLOCK), 但这还取决于你的应用是否允许,大部分分布式的系统都是可以加WITH (NOLOCK), 金融行业可能需要慎重。 2.    调整隔离级别,使用MVCC,我们的数据库默认级别是READ COMMITED. 建议修改为读提交快照隔离级别,这样的话可以尽量读写不阻塞,只不过MVCC的ROW VERSION保存到TEMPDB下面,需要维护好TEMPDB。当然如果你的整个数据库隔离级别可以设置为READUNCOMMINTED,这些就不必了。 减少资源的访问数,可以从如下几个方面入手: 1.    使用聚集索引,非聚集INDEX的叶子页面与堆或者聚集INDEX的数据页面分离。因此,如果对非聚集INDEX 操作的话,会产生两个锁,一个是基本表,一个是非聚集INDEX。而聚集INDEX就不一样,聚集INDEX的叶子页面和表的数据页面相同,他只需要一个LOCK。 2.    查询语句尽量使用覆盖INDEX, 使用全覆盖INDEX,就不需要访问基本表。如果没有全覆盖,还会通过RID或者CLUSTER INDEX访问基本表,这样产生的LOCK可能会与其他SESSION争用。 按照相同的时间顺序访问资源: 确保每个事务按照相同的物理顺序访问资源。两个事务按照相同的物理顺序访问,第一个事务会获得资源上的锁而不会被第二个事务阻塞。第二个事务想获得第一个事务上的LOCK,但被第一个事务阻塞。这样的话就不会导致循环阻塞的情况。 ------------------------- 回 4楼(leamonjxl) 的帖子 两种方式看你的业务怎么应用。这里不仅是分表的问题,还可能存在分库,分服务器的问题。取决与你的架构方案。 物理分表+视图,这是一种典型的冷热数据分离的方案,大致的做法如下: 1.    保留最近3个月的数据为当前表,也即就是我们说的热数据 2.    将其他数据按照某种规则分表,比如按照年或者季度或者月,这部分是相对冷的数据 分表后,涉及到几个问题: 第一问题是,转移数据的过程,一般是晚上业务比较闲来转移,转移按照一定的规则来做,始终保持3个月,这个定时任务本身也很消耗时间 再者,关于查询部分,我想你们的数据库服务器应该通过REPLICATION做了读写分离的吧,主库我觉得压力不会太大,主要是插入或者更新,只读需要做视图来包含全部的数据,但通过UNION ALL所有分表的数据,最后可能还是非常大,在某些情况下,性能不一定好。这个是不是业务上可以解决。比如,对于1年前的历史数据,放在单独的只读上,相对热的数据放在一起,这样压力也会减少。 分区表的话,因为涉及到10亿数据,要有好的分区方案,相对比较简单一点。但对于10亿的大表,始终是个棘手的问题,无论分多少个分区,单个服务器的资源也是有限的。可扩展性方面也存在问题,比如在只读上你没有办法做服务器级别的拆分了。这可能也会造成瓶颈。 现在很多企业都在做分库分表,这些的要解决一些高并发,数据量大的问题。不知是否考虑过类似于中间件的方案,比如阿里巴巴的TDDL类似的方案,如果你有兴趣,可以查询相关资料。 ------------------------- 回 9楼(jiangnii) 的帖子 阿里云数据库不仅提供一个数据库,还提供数据库一种服务。阿里云数据库不仅简化了基础架构的部署,还提供了数据库高可用性架构,备份服务,性能诊断服务,监控服务,专家服务等等,保证用户放心、方便、省心地使用数据库,就像水电一样。以前的运维繁琐的事,全部由阿里云接管,用户只需要关注数据库的使用和具体的业务就好。 关于优化和在云数据库上处理大数据量或复杂的数据操作方面,在云数据库上是一样的,没有什么特别的地方,不过我们的云数据库是使用SSD磁盘,这个比普通的磁盘要快很多,IO上有很大的优势。目前单个实例支持1T的数据量大小。陆续我们会推出更多的服务,比如索引诊断,连接诊断,容量分析,空间诊断等等,这些工作可能是专业的DBA才能完成的,以后我们会提供自动化的服务来为客户创造价值,希望能帮助到客户。 谢谢! ------------------------- 回 12楼(daniellin17) 的帖子 这个问题我不知道是否是两个问题,一个是并行度,另一个是并发,我更多理解是吞吐量,单就并行度而言。 提高并行度需要考虑的因素有: 1.    可用于SQL SERVER的CPU数量 2.    SQL SERVER的版本(32位/64位) 3.    可用内存 4.    执行的查询类型 5.    给定的流中处理的行数 6.    活动的并发连接数量 7.    sys.configurations参数:affinity mask/max server memory (MB)/ max degree of parallelism/ cost threshold for parallelism 以DOP的参数控制并行度为例,设置如下: SELECT * FROM sys.configurations WITH (NOLOCK) WHERE name = 'max degree of parallelism' EXEC sp_configure 'max degree of parallelism',2 RECONFIGURE WITH OVERRIDE 经过测试,DOP设置为2是一个比较适中的状态,特别是OLTP应用。如果设置高了,会产生较多的SUSPEND进程。我们可以观察到资源等待资源类型是:CXPACKET 你可以用下列语句去测试: DBCC SQLPERF('sys.dm_os_wait_stats',CLEAR) SELECT * FROM sys.dm_os_wait_stats WITH (NOLOCK) ORDER BY 2 DESC ,3 DESC 如果是吞吐量的话。优化的范围就很广了。优化是系统性的。硬件配置我们选择的话,大多根据业务量来预估,然后考虑以下: 1.    RAID的划分,RAID1适合存放事务日志文件(顺序写),RAID10/RAID5适合做数据盘,RAID10是条带化并镜像,RAID5条带化并奇偶校验 2.    数据库设置,比如并行度,连接数,BUFFER POOL 3.    数据库文件和日志文件的存放规则,数据库文件的多文件设置规则 4.    TEMPDB的优化原则,这个很重要的 5.    表的设计方面根据业务类型而定 6.    CLUSTERED INDEX和NONCLUSTERED INDEX的设计 7.    阻塞分析 8.    锁和死锁分析 9.    执行计划缓冲分析 10.    存储过程重编译 11.    碎片分析 12.    查询性能分析,这个有很多可以优化的方式,比如OR/UNION/类型转换/列上使用函数等等 我这里列举一个高并发的场景: 比如,我们的订单,比如搞活动的时候,订单刷刷刷地增长,单个实例可能每秒达到很高很高,我们分析到最后最常见的问题是HOT PAGE问题,其等待类型是PAGE LATCH竞争。这个过程可以这么来处理,简单列几点,可以参考很多涉及高并发的案例: 1.    数据库文件和日志文件分开,存放在不同的物理驱动器磁盘上 2.    数据库文件需要与CPU个数形成一定的比例 3.    表设计可以使用HASH来作为表分区 4.    表可以设置无序的KEY/INDEX,比如使用GUID/HASH VALUE来定义PRIMARY KEY CLUSTER INDEX 5.    我们不能将自增列设计为聚集INDEX 这个场景只是针对高并发的插入。对于查询而言,是不适合的。但这些也可能导致大量的页拆分。只是在不同的场景有不同的设计思路。这里抛砖引玉。 ------------------------- 回 13楼(zuijh) 的帖子 ECS上现在有两种磁盘,一种是传统的机械臂磁盘,另一种是SSD,请先诊断你的IO是否出现了问题,本帖中有提到如何判断磁盘出现问题的相关话题,请参考。如果确定IO出现问题,可以尝试使用ECS LOCAL SSD。当然,我们欢迎你使用云数据库的产品,云数据库提供了很多有用的功能,比如高可用性,灵活的备份方案,灵活的弹性方案,实用的监控报警等等。 ------------------------- 回 17楼(豪杰本疯子) 的帖子 我们单个主机或者单个实例的资源总是有限的,因为涉及到很大的数据量,对于存储而言是个瓶颈,我曾使用过SAN和SAS存储,SAN存储的优势确实可以解决数据的灵活扩展,但是SAN也分IPSAN和FIBER SAN,如果IPSAN的话,性能会差一些。即使是FIBER SAN,也不是很好解决性能问题,这不是它的优势,同时,我们所有DB SERVER都连接到SAN上,如果SAN有问题,问题涉及的面就很广。但是SAS毕竟空间也是有限的。最终也会到瓶颈。数据量大,是造成性能问题的直接原因,因为我们不管怎么优化,一旦数据量太大,优化的能力总是有限的,所以这个时候更多从架构上考虑。单个主机单个实例肯定是抗不过来的。 所以现在很多企业在向分布式系统发展,对于数据库而言,其实有很多形式。我们最常见的是读写分离,比如SQL SERVER而言,我们可以通过复制来完成读写分离,SQL SERVER 2012及以后的版本,我们可以使用ALWAYSON来实现读写分离,但这只能解决性能问题,那空间问题怎么解决。我们就涉及到分库分表,这个分库分表跟应用结合得紧密,现在很多公司通过中间件来实现,比如TDDL。但是中间件不是每个公司都可以玩得转的。因此可以将业务垂直拆分,那么DB也可以由此拆分开来。举个简单例子,我们一个典型的电子商务系统,有订单,有促销,有仓库,有配送,有财务,有秒杀,有商品等等,很多公司在初期,都是将这些放在一个主机一个实例上。但是这些到了一定规模或者一定数据量后,就会出现性能和硬件资源问题,这时我们可以将它们独立一部分获完全独立出来。这些都是一些好的方向。希望对你有所帮助。 ------------------------- 回 21楼(dt) 的帖子 问: 求大数据量下mysql存储,优化方案 分区好还是分表好,分的过程中需要考虑事项 mysql高并发读写的一些解决办法 答: 分区:对于应用来说比较简单,改造较少 分表: 应用需较多改造,优点是数据量太大的情况下,分表可以拆分到多个实例上,而分区不可以。 高并发优化,有两个建议: 1.    优化事务逻辑 2.    解决mysql高并发热点,这个可以看看阿里的一个热点补丁: http://www.open-open.com/doc/view/d58cadb4fb68429587634a77f93aa13f ------------------------- 回 23楼(aelven) 的帖子 对于第一个问题.需要看看你的数据库架构是什么样的?比如你的架构具有高可用行?具有读写分离的架构?具有群集的架构.数据库应用是否有较冷门的功能。高并发应该不是什么问题。可扩展性方面需要考虑。阿里云数据库提供了很多优势,比如磁盘是性能超好的SSD,自动转移的高可用性,没有任何单点,自动灵活的备份方案,实用的监控报警,性能监控服务等等,省去DBA很多基础性工作。 你第二个问题,看起来是一个高并发的场景,这种高并发的场景容易出现大量的LOCK甚至死锁,我不是很清楚你的业务,但可以建议一下,首先可以考虑快照隔离级别,实现行多版本控制,让读写不要阻塞。至于写写过程,需要加锁的粒度降低最低,同时这种高并发也容易出现死锁,关于死锁的分析,本帖有提到,请关注。 第三个问题,你用ECS搭建自己的应用也是可以的,RDS数据库提供了很多功能,上面已经讲到了。安全问题一直是我们最看重的问题,肯定有超好的防护的。 ------------------------- 回 26楼(板砖大叔) 的帖子 我曾经整理的关于索引的设计与规范,可以供你参考: ----------------------------------------------------------------------- 索引设计与规范 1.1    使用索引 SQL SERVER没有索引也可以检索数据,只不过检索数据时扫描这个表而异。存储数据的目的,绝大多数都是为了再次使用,而一般数据检索都是带条件的检索,数据查询在数据库操作中会占用较大的比例,提高查询的效率往往意味着整个数据库性能的提升。索引是特定列的有序集合。索引使用B-树结构,最小优化了定位所需要的键值的访问页面量,包含聚集索引和非聚集索引两大类。聚集索引与数据存放在一起,它决定表中数据存储的物理顺序,其叶子节点为数据行。 1.2    聚集索引 1.2.1    关于聚集索引 没聚集索引的表叫堆。堆是一种没有加工的数据,以行标示符作为指向数据存储位置的指针,数据没有顺序。聚集索引的叶子页面和表的数据页面相同,因此表行物理上按照聚集索引列排序,表数据的物理顺序只有一种,所以一个表只有一个聚集索引。 1.2.2    与非聚集索引关系 非聚集索引的一个索引行包含指向表对应行的指针,这个指针称为行定位器,行定位器的值取决于数据页保存为堆还是被聚集。若是堆,行定位器指向的堆中数据行的行号指针,若是聚集索引表,行定位器是聚集索引键值。 1.2.3    设计聚集索引注意事项     首先创建聚集索引     聚集索引上的列需要足够短     一步重建索引,不要使用先DROP再CREATE,可使用DROP_EXISTING     检索一定范围和预先排序数据时使用,因为聚集索引的叶子与数据页面相同,索引顺序也是数据物理顺序,读取数据时,磁头是按照顺序读取,而不是随机定位读取数据。     在频繁更新的列上不要设计聚集索引,他将导致所有的非聚集所有的更新,阻塞非聚集索引的查询     不要使用太长的关键字,因为非聚集索引实际包含了聚集索引值     不要在太多并发度高的顺序插入,这将导致页面分割,设置合理的填充因子是个不错的选择 1.3    非聚集索引 1.3.1    关于非聚集索引 非聚集索引不影响表页面中数据的顺序,其叶子页面和表的数据页面时分离的,需要一个行定位器来导航数据,在将聚集索引时已经有说明,非聚集索引在读取少量数据行时特别有效。非聚集索引所有可以有多个。同时非聚集有很多其他衍生出来的索引类型,比如覆盖索引,过滤索引等。 1.3.2    设计非聚集索引     频繁更新的列,不适合做聚集索引,但可以做非聚集索引     宽关键字,例如很宽的一列或者一组列,不适合做聚集索引的列可作非聚集索引列     检索大量的行不宜做非聚集索引,但是可以使用覆盖索引来消除这种影响 1.3.3    优化书签查找 书签会访问索引之外的数据,在堆表,书签查找会根据RID号去访问数据,若是聚集索引表,一般根据聚集索引去查找。在查询数据时,要分两个部分来完成,增加了读取数据的开销,增加了CPU的压力。在大表中,索引页面和数据页面一般不会临近,若数据只存在磁盘,产生直接随机从磁盘读取,这导致更多的消耗。因此,根据实际需要优化书签查找。解决书签查找有如下方法:     使用聚集索引避免书签查找     使用覆盖索引避免书签查找     使用索引连接避免数据查找 1.4    聚集与非聚集之比较 1.4.1    检索的数据行 一般地,检索数据量大的一般使用聚集索引,因为聚集索引的叶子页面与数据页面在相同。相反,检索少量的数据可能非聚集索引更有利,但注意书签查找消耗资源的力度,不过可考虑覆盖索引解决这个问题。 1.4.2    数据是否排序 如果数据需要预先排序,需要使用聚集索引,若不需要预先排序就那就选择聚集索引。 1.4.3    索引键的宽度 索引键如果太宽,不仅会影响数据查询性能,还影响非聚集索引,因此,若索引键比较小,可以作为聚集索引,如果索引键够大,考虑非聚集索引,如果很大的话,可以用INCLUDE创建覆盖索引。 1.4.4    列更新的频度 列更新频率高的话,应该避免考虑所用非聚集索引,否则可考虑聚集索引。 1.4.5    书签查找开销 如果书签查找开销较大,应该考虑聚集索引,否则可使用非聚集索引,更佳是使用覆盖索引,不过得根据具体的查询语句而看。 1.5    覆盖索引 覆盖索引可显著减少查询的逻辑读次数,使用INCLUDE语句添加列的方式更容易实现,他不仅减小索引中索引列的数据,还可以减少索引键的大小,原因是包含列只保存在索引的叶子级别上,而不是索引的叶子页面。覆盖索引充当一个伪的聚集索引。覆盖索引还能够有效的减少阻塞和死锁的发生,与聚集索引类似,因为聚集索引值发生一次锁,非覆盖索引可能发生两次,一次锁数据,一次锁索引,以确保数据的一致性。覆盖索引相当于数据的一个拷贝,与数据页面隔离,因此也只发生一次锁。 1.6    索引交叉 如果一个表有多个索引,那么可以拥有多个索引来执行一个查询,根据每个索引检索小的结果集,然后就将子结果集做一个交叉,得到满足条件的那些数据行。这种技术可以解决覆盖索引中没有包含的数据。 1.7    索引连接 几乎是跟索引交叉类似,是一个衍生品种。他将覆盖索引应用到交叉索引。如果没有单个覆盖索引查询的索引而多个索引一起覆盖查询,SQL SERVER可以使用索引连接来完全满足查询而不需要查询基础表。 1.8    过滤索引 用来在可能没有好的选择性的一个或者多个列上创建一个高选择性的关键字组。例如在处理NULL问题比较有效,创建索引时,可以像写T-SQL语句一样加个WHERE条件,以排除某部分数据而检索。 1.9    索引视图 索引视图在OLAP系统上可能有胜算,在OLTP会产生过大的开销和不可操作性,比如索引视图要求引用当前数据库的表。索引视图需要绑定基础表的架构,索引视图要求企业版,这些限制导致不可操作性。 1.10    索引设计建议 1.10.1    检查WHERE字句和连接条件列 检查WHERE条件列的可选择性和数据密度,根据条件创建索引。一般地,连接条件上应当考虑创建索引,这个涉及到连接技术,暂时不说明。 1.10.2    使用窄的索引 窄的索引有可减少IO开销,读取更少量的数据页。并且缓存更少的索引页面,减少内存中索引页面的逻辑读取大小。当然,磁盘空间也会相应地减少。 1.10.3    检查列的唯一性 数据分布比较集中的列,种类比较少的列上创建索引的有效性比较差,如果性别只有男女之分,最多还有个UNKNOWN,单独在上面创建索引可能效果不好,但是他们可以为覆盖索引做出贡献。 1.10.4    检查列的数据类型 索引的数据类型是很重要的,在整数类型上创建的索引比在字符类型上创建索引更有效。同一类型,在数据长度较小的类型上创建又比在长度较长的类型上更有效。 1.10.5    考虑列的顺序 对于包含多个列的索引,列顺序很重要。索引键值在索引上的第一上排序,然后在前一列的每个值的下一列做子排序,符合索引的第一列通常为该索引的前沿。同时要考虑列的唯一性,列宽度,列的数据类型来做权衡。 1.10.6    考虑索引的类型 使用索引类型前面已经有较多的介绍,怎么选择已经给出。不再累述。 ------------------------- 回 27楼(板砖大叔) 的帖子 这两种都可以吧。看个人的喜好,不过微软现在的统一风格是下划线,比如表sys.all_columns/sys.tables,然后你再看他的列全是下划线连接,name     /object_id    /principal_id    /schema_id    /parent_object_id      /type    /type_desc    /create_date    /modify_date 我个人的喜好也是喜欢下划线。    
石沫 2019-12-02 01:34:30 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT