文档章节

基于FEA spk的web日志分析

openfea
 openfea
发布于 2017/06/15 21:29
字数 1377
阅读 12
收藏 0

数据准备

数据:美国宇航局肯尼迪航天中心WEB日志

数据下载:http://ita.ee.lbl.gov/html/contrib/NASA-HTTP.html

我们先来看看数据:首先将日志加载到df表,并查看前十行

打开fea的界面,运行以下命令

spk= @udf df0@sys by spk.open_spark

#创建spk的连接

df= @udf spk by spk.load_text with (/data/access_log_Jul95)

#加载hdfs目录/data/access_log_Jul95里面的text文件

a= @udf df by spk.dump

dump a

下面给出字段的解释:

数据解析

首先我们将数据进行解析,这里会用到正则表达式

df1= @udf df by spk.reg_extract with (regexp_extract('value', r'^([^\s]+\s)', 1).alias("host"),

regexp_extract('value', r'^.*\[(\d\d/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})]', 1).alias('timestamp'),

regexp_extract('value', r'^.*"\w+\s+([^\s]+)\s+HTTP.*"', 1).alias('path'),

regexp_extract('value', r'^.*"\s+([^\s]+)', 1).cast('integer').alias('status'),

regexp_extract('value', r'^.*\s+(\d+)$', 1).cast('integer').alias('content_size'))

#将df表的value字段进行正则表达式提取出第一个匹配的主机名,将其重命名为host列

将df表的value字段进行正则表达式提取出第一个匹配的时间,将其重命名为timestamp列

将df表的value字段进行正则表达式提取出第一个匹配的路径,将其重命名为path列

将df表的value字段进行正则表达式提取出第一个匹配的状态码,将它的类型转化为int类型并将其重命名为status列

将df表的value字段进行正则表达式提取出第一个匹配的状态码,将它的类型转化为int类型并将其重命名为status列

将df表的value字段进行正则表达式提取出第一个匹配的字节数,将它的类型转化为int类型并将其重命名为content_size列

a= @udf df1 by spk.dump

dump a

数据清洗

首先我们查看一下原始日志包含多少空行。

a= @udf df by spk.df_null_count

dump a

 

可以看到原始数据没有空行

下面我们统计每列有多少个null值

a= @udf df1 by spk.df_null_count

dump

可以看到status列有一个空值,content_size列有19727个空值

df1= @udf df1 by spk.drop_null with (status)

#对status这列值进行过滤为null的数据

dump a

a= @udf df1 by spk.df_null_count

可以看到已经过滤掉了

df1= @udf df1 by spk.df_fillna with (content_size:0)

#将content_size列为空值的填充为0

a= @udf df1 by spk.df_null_count

dump a

 

可以看到所有的列没有空值了,下面进行数据的转换

数据转换

现在数据框中的timestamp列并不是实际的时间戳,而是apache服务器的时间格式:[dd/mmm/yyyy:hh:mm:ss (+/-)zzzz],接下来我们将其转换为标准的时间戳格式

df2= @udf df1 by spk.parse_time with ('timestamp','time')

#将apache服务器的时间格式timestamp列转化为列为time的标准的时间戳格式

a= @udf df2 by spk.dump

dump a

数据统计

数据总览

我们先看一下content_size这一列数据的统计值:最大值,最小值,count等

df3= @udf df2 by spk.df_desc with (content_size)

#统计content_size这一列的最大值,最小值等指标

b= @udf df3 by spk.to_DF

dump b

HTTP响应状态统计

下面我们来分析一下HTTP的响应状态,我们把数据按照status分组计数,然后按照status排序

df4= @udf df2 by spk.df_agg_count with (status)

#将status字段进行分组统计计数

df4= @udf df4 by spk.order with (status)

#将统计后的结果按照status字段升序排序

a= @udf df4 by spk.to_DF

dump a

由此可以看到status=200的占据了很大一部分比例

客户端访问频率统计,统计一下访问服务器次数超过10次host

df5= @udf df2 by spk.df_agg_count with (host)

#对host字段进行分组统计次数

df5= @udf df5 by spk.filter with (count>10)

#对次数大于10的进行过滤,保留次数大于10

a= @udf df5 by spk.dump

dump a

URIs访问量统计. 统计服务区资源的访问量,首先按照path进行分组,然后计数

df6= @udf df2 by spk.df_agg_count with (path)

#对path字段进行分组统计计数

df6= @udf df6 by spk.order with (count,desc)

#将统计后的结果按照count字段进行降序排列

a= @udf df6 by spk.dump

dump a

可以看到,图片的url访问量最多

统计HTTP返回状态不是200的十大URL。首先查询所有的 status <> 200 的记录, 然后按照path进行分组统计排序,显示结果

df7= @udf df2 by spk.filter with (status<>200)

#将status不是200的数据保留下来

df7= @udf df7 by spk.df_agg_count with (path)

#对过滤后的path字段进行分组计数

df7= @udf df7 by spk.order with (count,desc)

#将统计后的的表按照count降序排列

a= @udf df7 by spk.dump

#查看前10条数据

dump a

统计host的数量。潜在条件:对host字段进行去重

df8= @udf df2 by spk.loc with (host)

#选择host列

df8= @udf df8 by spk.distinct

#进行去重

b= @udf df8 by spk.count

#统计数量

dump b

统计每日的访客数(根据host去重)

1, 选择 time 和 host 两列值

2, 将同一天的host相同进行去重

3, 最后按照day进行分组统计每天host访问量.

df9= @udf df2 by spk.extract_day with ('host',dayofmonth('time').alias('day') )

#选择host列,从time字段提取出天数并命名为day列

df9= @udf df9 by spk.distinct

#对这2个字段进行去重

df9= @udf df9 by spk.df_agg_count with (day)

#对day字段进行分组统计

df9= @udf df9 by spk.order with (day)

#按照day字段从小到大排序

b= @udf df9 by spk.to_DF

dump b

© 著作权归作者所有

openfea
粉丝 18
博文 86
码字总数 95615
作品 1
杭州
其他
私信 提问
7 款顶级的开源 Web 分析软件

Web 分析无非就是 Web 流量的测量。但它并不限于测量网络流量,还包括: 分析 数据采集 为了了解和优化网页而上报网络数据 Google Analytics是最广泛使用的基于云的网络分析服务。不过,你的...

oschina
2017/06/24
7K
2
重磅发布: 阿里云WAF日志实时分析上线 (含视频)

背景 Web攻击形势 互联网界的安全一直都不断的面临着挑战,以DDoS/Web攻击为代表的网络威胁直接对网络安全产生严重的影响。 据近年来的调查报告显示,Web攻击的方式向两极化发展,慢速攻击、...

成喆
2018/12/10
0
0
推荐 5 款 Google Analytics 的开源替代品

Web分析软件通过收集、测量和分析网站访问者行为,向网站管理员和所有者提供实时数据,帮助他们识别机会和问题,跟踪流量来源,判断点击转换率等。 Google Analytics 是搜索巨人提供的一个优...

oschina
2013/12/26
8.2K
12
简单搭建 ELK + OpenWAF 环境

ELK 是比较火的开源日志分析系统 文章主要介绍,ELK 的 docker 部署及与 OpenWAF 的结合 OpenWAF简介 OpenWAF是第一个全方位开源的Web应用防护系统(WAF),他基于nginx_lua API分析HTTP请求...

温柔魔君
2017/07/05
1
0
新功能: 阿里云爬虫风险管理利器 - 实时日志分析 (一)

背景 爬虫形势 Web安全形势一直不容乐观, 根据Globaldots的2018年机器人报告, 爬虫占据Web流量的42%左右. 为什么要反爬 防资源过度消耗 大量的机器人访问网站, 设想你的网站有42%的流量都不是...

成喆
2018/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
15
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.4K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部