【阿里云网站日志分析实践】通过Log Service日志服务导入MaxCompute分析
2017-03-30 00:00
1846 查看
日志服务收集的日志除了可以被实时查询外,还可以把日志数据投递到大数据计算服务MaxCompute(原ODPS),进一步进行个性化BI分析及数据挖掘。通过日志服务投递日志数据到MaxCompute具有如下优势:
使用非常简单。用户只需要完成2步配置即可以把日志服务Logstore的日志数据迁移到MaxCompute中。避免重复收集工作。由于日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集一遍日志数据后再导入到MaxCompute。
充分复用日志服务内的日志分类管理工作。用户可让日志服务中不同类型的日志(存在不同Logstore中)、不同Project的日志自动投递到不同的MaxCompute表格,方便管理及分析MaxCompute内的日志数据。
在大部分情况下日志数据在写入Logstore后的0.5~1个小时导入到MaxCompute,用户可以在控制台“投递任务管理”查看导入状态。导入成功后用户即可在MaxCompute内查看到相关日志数据。
结合日志服务的实时消费,投递日志数据到MaxCompute的数据通道以及日志索引功能,可以让用户按照不同的场景和需求、以不同的方式复用数据,充分发挥日志数据的价值。
配置流程
举例日志服务的一条日志如下:日志左侧的ip、status、thread、time、url、user-agent等是日志服务数据的字段名称,需要在下方配置中应用到。
1.第一步:配置AK&自动开通
首先在日志服务的控制台“Logstore列表”点击日志投递列“创建ODPS”,即打开了配置AK(注意复制过来不要有空格)来自动开通数加及大数据计算服务MaxCompute(原ODPS)(默认是按量后付费模式,具体参见如上图,填写账号的阿里云AK信息,勾选自动开通项,点击确定,初始化开通需10~20秒左右,请耐心等待。如果已经开通数加及大数据计算服务MaxCompute(原ODPS),将直接跳过该步骤。
目前暂不支持子用户来投递大数据计算服务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 | 日志内容字段 | 解析自日志,该字段取值应该是可以枚举的,保证分区数目不会超出上限。 |
系统保留字段中建议使用__partition_time__,__source__,__topic__。
MaxCompute单表有分区数目6万的限制,分区数超出后无法再写入数据,所以日志服务导入MaxCompute表至多支持3个分区列。请谨慎选择自定义字段作为分区列,保证其值是可枚举的。
系统保留字段__extract_others__历史上曾用名_extract_others_,填写后者也是兼容的。
MaxCompute分区列的值不支持”/“等特殊字符,这些是MaxCompute的保留字段。
MaxCompute分区列取值不支持空,所以映射到分区列的字段必须要在日志里存在,空分区列的日志会在投递中被丢弃。
投递配置
配置好AK后进入到投递配置页面,在该页面需要配置投递大数据计算服务MaxCompute(原ODPS)的相关内容:
选项含义:
参数 | 语义 |
---|---|
投递名称 | 自定义一个投递的名称,方便后续管理 |
MaxComputeProject | MaxCompute项目名称,该项默认为新创建的Project,如果已经是MaxCompute老客户,可以下拉选择已创建其他Project |
MaxComputeTable | MaxCompute表名称,请输入自定义的新建的MaxCompute表名称或者选择已有的MaxCompute表 |
MaxCompute普通列 | 按序,左边填写与MaxCompute表数据列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型 |
MaxCompute分区列 | 按序,左边填写与MaxCompute表分区列相映射的日志服务字段名称,右边填写或选择MaxCompute表的普通字段名称及字段类型 |
分区时间格式 | __partition_time__输出的日期格式,参考 |
导入MaxCompute间隔 | MaxCompute数据投递间隔,默认1800,单位:秒 |
日志服务投递MaxCompute功能按照字段与列的顺序进行映射,修改MaxCompute表列名不影响数据导入,如更改MaxCompute表schema,请重新配置字段与列映射关系。
日志服务数据的一个字段最多允许映射到一个MaxCompute表的列(数据列或分区列),不支持字段冗余。
__partition_time__格式
将日志时间作为分区字段,通过日期来筛选数据是MaxCompute常见的过滤数据方法。
日志服务根据日志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-ddHH:mm | 2016-01-2720:30 |
1800 | yyyyMMdd | 20160127 |
3600 | yyyyMMddHHmm | 201601272000 |
3600 | yyyy_MM_dd_HH | 2016_01_27_20 |
以上分区时间格式是测试通过的样例,你也可以参考
编辑投递配置
在Logstore列表投递项,单击“修改”即可针对之前的配置信息进行编辑。其中如果想新增列,可以在大数据计算服务MaxCompute(原ODPS)修改投递的数据表列信息,则点击“修改”后会加载最新的数据表信息。
投递任务管理
在启动“投递功能”后,日志服务后台会定期启动离线投递任务。用户可以在控制台上看到这些投递任务的状态和错误信息。具体请参考如果投递任务出现错误,控制台上会显示相应的错误信息:
错误信息 | 建议方案 |
---|---|
MaxCompute项目空间不存在 | 在MaxCompute控制台中确认配置的MaxCompute项目是否存在,如果不存在则需要重新创建或配置。 |
MaxCompute表不存在 | 在MaxCompute控制台中确认配置的MaxCompute表是否存在,如果不存在则需要重新创建或配置。 |
MaxCompute项目空间或表没有向日志服务授权 | 在MaxCompute控制台中确认授权给日志服务账号的权限是否还存在,如果不存在则需要重新添加上相应权限。 |
MaxCompute错误 | 显示投递任务收到的MaxCompute错误,请参考MaxCompute相关文档或联系MaxCompute团队解决。日志服务会自动重试最近两天时间的失败任务。 |
日志服务导入字段配置无法匹配MaxCompute表的列 | 重新配置MaxCompute表格的列与日志服务数据字段的映射配置。 |
MaxCompute中消费日志
MaxCompute用户表中示例数据如下:同时,我们强烈推荐客户直接使用已经与MaxCompute绑定的
__partition_time__使用方法
使用MaxCompute的字符串比较筛选数据,可以避免全表扫描。比如查询2016年1月26日一天内日志数据:__extract_others__使用方法
log_extract_others为一个json字符串,如果想获取该字段的user-agent内容,可以进行如下查询:get_json_object是
示例供参考,请以MaxCompute产品建议为最终标准。
其它
授予ODPS数据投递权限
如果在数加平台执行表删除重建动作,会导致默认授权失效。请手动重新为日志服务投递数据授权。在ODPS项目空间下添加用户:
shennong_open@aliyun.com是日志服务系统账号(请不要用自己的账号),授权目的是为了能将数据写入到ODPS
ODPS项目空间Read/List权限授予:
ODPS项目空间的表Describe/Alter/Update权限授予:
确认ODPS授权是否成功:
Aprojects/{ODPS_PROJECT_NAME}:List|Read
Aprojects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}:Describe|Alter|Update
相关文章推荐
- 【阿里云网站日志分析实践】通过Log Service日志服务导入MaxCompute分析
- 【阿里云网站日志分析实践】通过Log Service日志服务导入MaxCompute分析
- android通过jni控制wifi service服务的流程分析
- 【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
- awstats网站日志分析工具实践
- 导入文件的三种方式及分析web服务日志计算元素字节大小案例
- andoroid 在一个应用里面绑定另一个应用的服务service(实践通过)
- 【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
- 【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
- 通过实践学习Shell(做腾讯百度淘宝shell面试题 以及切割分析日志)
- 在RHEL5下构建LAMP网站服务平台之awstats日志分析工具的配置
- [导入]如何做好网站开发项目需求分析
- 使用AWStats做IIS网站日志分析
- 发现一款日志分析工具AWStats,能取代网站统计程序
- 发现一款日志分析工具AWStats,能取代网站统计程序
- linux log analysis 日志分析
- Printk的loglevel和日志记录分析
- [导入]C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- [ERR0134] Requested Service is not available 请求的服务不存在错误原因分析
- 一次有趣的Debug——使用Lumigent Log Explorer对SQL Server事务日志进行分析,对SQL Server事务、操作进行撤销(恢复)