大数据Clouder:MOOC网站日志分析
日志,log,事件记录
网站日志:系统日志,程序日志
网站的系统访问日志,有通用格式
网站日志分析:
(1)价值/重要性:运行,安全,运营,用户信息
(2)流程:采集,处理,展现,结果
重要性:
①网站运行状况(如网站PV,UV),
②网站安全状况(如恶意攻击,密码暴力破解),
③网站运营状况(如搜索引擎流量来源),
④网站用户信息(如操作系统,浏览器)。
流程:
①数据采集(Tomcat、Nginx、使用程序自定义采集),
②数据处理(清理、转换、抽取,SQL、Java、Python、Hadoop),
③数据展现(图表化、Tableau、D3.js、Python),
④结果处理(程序优化、服务器调整、SEO优化)。
Nginx:Nginx(engine x)是一个高性能的HTTP和反向代理服务器。
用户请求分发,简单的负载均衡。默认不开启访问日志。修改配置文件。开启访问日志,配置访问日志格式。
Tomcat:Tomcat服务器是一个免费的开放源代码的Web应用服务器。
默认不开启访问日志。修改配置文件。
正则表达式,提取属性
HTTP请求类型:GET,POST。
判断是否为恶意攻击的依据:大量的404状态的HTTP请求。
网站用户访问日志清理:用户的IP,访问时间,请求链接,来源链接,客户端信息。
网站的流量分析:IP(独立IP),PV(访问量),UV(独立客户),访问趋势图。
网站的来源分析:访问来源分析,搜索引擎来源。
网站的访问分析:访问链接TopN,恶意攻击IP。
网站的访客分析:访客地域分布,访客浏览器,访客操作系统,访客网络运营商。
网络优化:程序优化,服务器优化,搜索引擎推广。
MaxCompute(本文中简称MC),Quick BI
MC概述:大数据计算服务(MaxCompute,原名ODPS)由阿里云自主研发,提供针对TB/PB级数据、实时性要求不高的数据仓库解决方案。
MC产品特点:分布式架构,简单易用,安全可靠,管理与授权。
MC概念名词:项目空间project,表table,分区partition,任务task,资源resource。
MC基础架构,ODPS:计算层,逻辑层,接入层,客户端。
Quick BI使用哪些技术进行数据分析:数据仓库技术,线上分析技术,数据挖掘,数据展现技术。
Quick BI:支持多种源数据,成本低,速度快,易操作,安全。
Quick BI实现:数据分析,数据自助获取,业务数据探查,报表制作,数据门户搭建。
Quick BI优势和价值:无缝集成云上数据库,图表,分析(多维度数据分析),快速搭建数据门户,实时,安全管控数据权限。
MOOC网站用户访问日志分析
网站运行过程中遇到的问题:
①用户抱怨网站加载内容很慢,
②用户抱怨网站样式错乱,
③领导认为课程销量不行,
④网站偶尔发生崩溃。
使用Java对文本预处理:增加一个自增长的ID列。由于访问时间精度不够,(只有秒级别,如果是毫秒就不用增加ID列了)。
提取IP中的信息:城市,网络服务商。
纯真IP数据库:是全国的IP段,只提供IP地址查询。收集全国和主要国家地区的几乎所有IP段对应的城市信息。之前IPQQ对应城市就是利用这个数据库来完成的,是目前公开的更新最快最全的IP地址库 。就是一个可以查询ip地址的软件。
属性:IP起,IP止,地址信息,运营商。
IP转数字:a.b.c.d=>a256256256+b256256+c256+d
使用tunnel命令行上传数据到MC:
①下载odpscmd客户端
②配置,odpscmd_public->conf->odps_config.ini:项目名,Access Key ID ,Access Key Secret
③开启,odpscmd_public->bin->odpscmd.bat
④使用
建表:
create tabel t_web_access_log_content(content string); --日志文件
create table t_cz_ip_content(content string); --IP库文件
使用tunnel上传数据:
tunnel upload -fd "NoDelimiter" D:access.log t_web_access_log_content;
tunnel upload -fd "NoDelimiter" D:ip.txt t_cz_ip_content;
查看:
show tables;
select * from t_test limit 5;
正则表达式
使用正则表达式提取:
①日志属性(MOOC网站的用户访问日志),
②IP属性(纯真IP数据库),
③省信息和有效访问链接(省、自治区、直辖市、港澳),
④访问时间处理和来源分类(self、google、baidu、bing、360),⑤访问客户端信息处理(操作系统、浏览器) ,
⑥访问链接TopN(group by url --使用url分组,limit 10 --显示前10个),
⑦每个访客的第一条日志(独立访客,即独立客户端),
⑧IP黑名单(status="404",group by ip,count>10) 。
注意:
在提取IP时,将IP的第一个段单独提取存放,使用IP的第一个段可以进行表关联的优化,(因为目前还没有运营商的IP是跨第一个段的)。
有了①②,就可以从IP表中查询城市和运营商信息。
MaxCompute不支持非等值join,可以使用MapJoin,但mapjoin的表不能太大,不能超过512MB,(默认的join是reduce join)。
对IP和客户端信息一起group by来保证独立访客,即独立客户端。
判断是否为恶意攻击的依据:大量的404状态的HTTP请求。
对应的沙箱实验
网址:https://edu.aliyun.com/lab/courses/9f0e0b2dd2984081b17b0fd494064233/detail?purchaseRecordId=f49454db14b143618e661c654f883830
实验环境:JAVA环境,odpscmd客户端,DataWorks->项目->进入工作区->IDE页面。
实验步骤:(1)使用MaxCompute处理数据,(2)使用Quick BI展现数据。
(1)使用MC处理数据:
1、对日志文件进行预处理:增加一个自增长的ID列。在每行最前面加上一个ID,然后以空格隔开。
方法一:采用Java编程语言处理。
方法二:使用excel处理(数据量不大的情况下)。
注意:Tab键是tabulator(制表键)。
①使用excel打开日志文件access.log。
②在第一列前插入一列新列->在A1单元格中填入数字“1”->全选选中A列->点击填充->序列->终止值:61279。
③在C1单元格中写入函数公式:=CONCATENATE(A1," ",B1)->回车->选中C1单元格,在其右下角鼠标由空心加号变成实心加号处双击->计算出全部C列结果。
④将整个C列复制到文本文件,保存为log.txt。
2、使用tunnel命令行上传数据到MC中:
CREATE TABLE t_web_access_log_content (content STRING);
CREATE TABLE t_cz_ip_content (content STRING);
tunnel upload -fd "NoDelimiter" D:testdatalog.txt t_web_access_log_content;
tunnel upload -fd "NoDelimiter " D:testdataip.txt t_cz_ip_content;
show tables;
list tables;
select * from t_web_access_log_content limit 2;
select * from t_cz_ip_content limit 2;
注意:如果中文不能正常显示是展示的编码不对,可以在启动入口odpscmd.bat中的开头加入新行:chcp 936,然后重新打开执行查询,当然也可以不处理,因为对数据没影响,只是展示问题。
3、DataWorks->项目->进入工作区->IDE页面->
新建任务->工作流任务,日志处理,手动调度->点击创建->拖拽节点组件,虚节点、ODPS_SQL组件->写入sql->点击右上角的自动布局->保存->提交->测试运行->
点击前往运维中心,可以看到提交的任务->点击示例名称,可以看到当前执行流程,查看跑出的数据。
注意:绿色表示执行完成,蓝色表示正在执行,黄色表示等待,红色表示执行失败。
刷新页面,查看执行流程,执行过程大概在10分钟以内,如果全是绿色表全部执行完毕且成功。
注意:在使用MC做任务时,节点的逻辑及sql代码,很重要,一旦有错误会直接导致得到的数据存在质量问题,导致数据分析的错误,可以利用元数据来查找管理数据质量问题。
(2)使用Quick BI展现数据:(标准版)
1、添加数据源
显示名称:网站日志分析
注意:添加之前可以连接测试一下,通过即可。
注意:在Quick BI中使用MaxCompute来新建数据源,在新建好的数据源里包含了这个项目空间中的所有表。
2、创建、编辑数据集
为t_web_access_log,t_web_access_log_url_top,t_web_access_log_first,t_web_access_log_ip_black四个表分别创建四个数据集。
注意:点击编辑,系统默认将表的字符串类型(Str.)属性归类到维度属性,数值类型(No.)字段归类到度量。
注意:编辑完成后,要保存。
3、新建仪表板
注意:点击全局设置,可以去除水印。
注意:经常保存以免操作丢失。
新建计算字段(维度)->名称:运营商,数据类型:文本,表达式:
case
when instr([isp],'电信')>0 then '电信'
when instr([isp],'移动')>0 then '移动'
when instr([isp],'联通')>0 then '联通'
else '其他'
end
新建计算字段(维度)->名称:访问来源,数据类型:文本,表达式:
case
when [搜索引擎] = 'self' then '直接访问'
when [搜索引擎] = 'other' then '其他链接'
else '搜索引擎'
end