日志(log)
1、日志概念:以标准化的格式做的记录。
2、日志的通用格式:"%h %l %u %t \"%r\" %>s %b"
如:127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
- 127.0.0.1(%h):发起请求的客户端IP地址
- "-"(%l):用户身份(未知)
- frank(%u):作者
-[10/Oct/2000:13:55:36 -0700](%t):日期
-
-
- day = 2 digits
- month = 3 letters
- year = 4 digits
- hour = 2 digits
- minute = 2 digits
- second = 2 digits
- zone = (+ | -) 4 digits
-
-"GET /apache_pb.gif HTTP/1.0"(\"%r\"):客户端请求字符串,包含三部分:1)请求方式 ( GET、POST ),2)访问路径,3)客户端协议版本
- 200(%>s):状态码,三位数
-2326 (%b):字节数,表示返回数据的大小,如果没有返回任何内容,这个值会是"-" (也有时候会是0)
3、日志分析的重要性:模型训练的数据实质上来自于日志,人们在网上的日常活动大多以日志的形式记录下来,从日志中提取整理出的格式化数据保存于表格或HDFS上,用于建模。因此日志是最重要的数据来源之一。
日志格式化
1、读取数据:读取日志并查看数据格式。
2、明确目标:解析日志的目标是把数据转化为格式化的数据,以表的形式展示。
3、转换方式:将每条日志分拆成多个部分,每个部分有实际的物理含义,即每个item为Row形式。
4、一条日志的分析:
- 字符串不固定,不能直接拆分。
- 每部分的数据都有自己本身的实际意义,即有固定的模式,因此可以使用正则表达式提取数据。
- 用正则表达式可能匹配不到数据,需要做异常处理,还要注意正则的成功率。(数据量过大时可以先随机抽样部分数据,检验正则效率,进行完善。)
- 日期数据要处理为datetime类型,以便得到星期、假期等更有意义的数据。
日志解析
以上得到格式化的日志数据,开始进行分析。
1、初步解析:对发送请求的客户端、发送请求的访问路径、返回的状态码、数据大小做统计,并做可视化。
- 目的:了解客户端的地域分布,服务器响应是否正常。
- 方法:① map() 得到 pair RDD ② reduceByKey() 进行统计。③ takeOrdered( mun:int , implicit ord: Ordering[T] ) 按照一定排序规则(默认升序),返回前num个元素。
2、进一步解析:请求成功及失败最高的访问路径,访问服务器的客户端总个数,每天有多少客户端访问,每个host的平均请求次数,
- 目的:进一步了解访问最多的host,访问路径,网页链接的有效性。
- 具体分析内容:总访问量(总host数),每日的访问量(每日host数),每日每位客户端平均访问次数。对状态码404的host,访问路径,访问时段等信息进行分析。(404错误表示链接指向的网页不存在,过多的404错误会影响网站流量,需要及时维护。可能是客户端问题,也可能是服务器端问题。)